{"version":3,"file":"static/js/main.d5de265d.js","mappings":"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OACA,WACA,aACA,OACA,cACA,WACA,WACA,WACA,SACA,WAEA,aACAsG,SAAQtG,IACRqkC,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EA/JY,GAiKZ,EACAA,EAAK3G,cACL,MACA,GACA,EACD,IAKH,CACE,UAGA,WACA,QACA,YAKAiN,SAAQtG,IACRqkC,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EAxLY,GA0LZ,EACAA,EACA,MACA,GACA,EACD,IAKH,CACE,UACA,YAKAsG,SAAQtG,IACRqkC,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EAvMuB,GAyMvB,EACAA,EACA,MACA,GACA,EACD,IAIH,CACE,OACA,OACA,OACA,QAKAsG,SAAQtG,IACRqkC,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EArNqB,GAuNrB,EACAA,EACA,MACA,GACA,EACD,IAIH,CAAC,UAAW,SAASsG,SAAQtG,IAC3BqkC,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EAtOY,GAwOZ,EACAA,EAAK3G,cACL,MACA,GACA,EACD,IAGH,MAAMsjF,EAAW,iBACXn7C,EAAauP,GAASA,EAAM,GAAG/O,cAOrC,CACE,gBACA,qBACA,cACA,iBACA,aACA,YACA,YACA,sBACA,8BACA,gBACA,kBACA,oBACA,oBACA,eACA,YACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,aACA,+BACA,6BACA,cACA,iBACA,kBACA,iBACA,iBACA,aACA,aACA,eACA,oBACA,qBACA,cACA,WACA,iBACA,mBACA,kBACA,aACA,eACA,yBACA,0BACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,eACA,cACA,kBACA,iBACA,qBACA,sBACA,eACA,gBACA,eACA,eACA,YACA,gBACA,iBACA,gBACA,aACA,gBACA,gBACA,eACA,eACA,cACA,YAKA17B,SAAQc,IACR,MAAMpH,EAAOoH,EAAc2B,QAAQ4zE,EAAUn7C,GAC7C6C,EAAWrkC,GAAQ,IAAI08E,EACrB18E,EA9VW,GAgWX,EACAoH,EACA,MACA,GACA,EACD,IAIH,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","sources":["../node_modules/@visx/shape/lib/shapes/Line.js","../node_modules/balanced-match/index.js","../node_modules/css-mediaquery/index.js","../node_modules/debounce/index.js","../node_modules/domelementtype/lib/index.js","../node_modules/html-dom-parser/src/client/constants.ts","../node_modules/html-dom-parser/src/client/domparser.ts","../node_modules/html-dom-parser/src/client/html-to-dom.ts","../node_modules/html-dom-parser/src/client/utilities.ts","../node_modules/html-dom-parser/node_modules/domhandler/lib/index.js","../node_modules/html-dom-parser/node_modules/domhandler/lib/node.js","../node_modules/html-react-parser/src/attributes-to-props.ts","../node_modules/html-react-parser/src/dom-to-react.ts","../node_modules/html-react-parser/src/index.ts","../node_modules/html-react-parser/src/utilities.ts","../node_modules/html-react-parser/node_modules/domhandler/lib/index.js","../node_modules/html-react-parser/node_modules/domhandler/lib/node.js","../node_modules/inline-style-parser/index.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_getValue.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/_isKeyable.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_root.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/eq.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/isObject.js","../node_modules/lodash/lodash.js","../node_modules/lodash/memoize.js","../node_modules/matchmediaquery/index.js","../node_modules/math-expression-evaluator/src/formula_evaluator.js","../node_modules/math-expression-evaluator/src/lexer.js","../node_modules/math-expression-evaluator/src/math_function.js","../node_modules/math-expression-evaluator/src/postfix.js","../node_modules/math-expression-evaluator/src/postfix_evaluator.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-property/lib/index.js","../node_modules/react-property/lib/possibleStandardNamesOptimized.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/reduce-css-calc/index.js","../node_modules/reduce-css-calc/node_modules/balanced-match/index.js","../node_modules/reduce-function-call/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/style-to-js/src/index.ts","../node_modules/style-to-js/src/utilities.ts","../node_modules/style-to-object/src/index.ts","../node_modules/classnames/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../webpack/runtime/nonce","../node_modules/@radix-ui/react-context/src/createContext.tsx","../node_modules/@radix-ui/react-compose-refs/src/composeRefs.tsx","../node_modules/@radix-ui/react-slot/src/Slot.tsx","../node_modules/@radix-ui/react-collection/src/Collection.tsx","../node_modules/@radix-ui/primitive/src/primitive.tsx","../node_modules/@radix-ui/react-use-callback-ref/src/useCallbackRef.tsx","../node_modules/@radix-ui/react-use-controllable-state/src/useControllableState.tsx","../node_modules/@radix-ui/react-primitive/src/Primitive.tsx","../node_modules/@radix-ui/react-use-layout-effect/src/useLayoutEffect.tsx","../node_modules/@radix-ui/react-presence/src/Presence.tsx","../node_modules/@radix-ui/react-presence/src/useStateMachine.tsx","../node_modules/@radix-ui/react-id/src/id.tsx","../node_modules/@radix-ui/react-collapsible/src/Collapsible.tsx","../node_modules/@radix-ui/react-direction/src/Direction.tsx","../node_modules/@radix-ui/react-accordion/src/Accordion.tsx","../node_modules/shared/src/utils.ts","../node_modules/lucide-react/src/defaultAttributes.ts","../node_modules/lucide-react/src/Icon.ts","../node_modules/lucide-react/src/createLucideIcon.ts","../node_modules/lucide-react/src/icons/chevron-down.ts","../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/src/lib/class-utils.ts","../node_modules/tailwind-merge/src/lib/lru-cache.ts","../node_modules/tailwind-merge/src/lib/modifier-utils.ts","../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../node_modules/tailwind-merge/src/lib/tw-join.ts","../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../node_modules/tailwind-merge/src/lib/config-utils.ts","../node_modules/tailwind-merge/src/lib/from-theme.ts","../node_modules/tailwind-merge/src/lib/validators.ts","../node_modules/tailwind-merge/src/lib/default-config.ts","../node_modules/tailwind-merge/src/lib/tw-merge.ts","lib/utils.js","components/ui/accordion.jsx","../node_modules/gsap/gsap-core.js","../node_modules/gsap/CSSPlugin.js","../node_modules/gsap/index.js","../node_modules/@gsap/react/src/index.js","../node_modules/gsap/Observer.js","../node_modules/gsap/ScrollTrigger.js","components/SectionTitle.jsx","../node_modules/html-react-parser/esm/index.mjs","components/ClosingSection.jsx","../node_modules/date-fns/constructFrom.mjs","../node_modules/date-fns/_lib/defaultOptions.mjs","../node_modules/date-fns/getDefaultOptions.mjs","../node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../node_modules/date-fns/locale/en-US/_lib/localize.mjs","../node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../node_modules/date-fns/locale/en-US/_lib/match.mjs","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../node_modules/date-fns/locale/en-US.mjs","../node_modules/date-fns/toDate.mjs","../node_modules/date-fns/_lib/format/longFormatters.mjs","../node_modules/date-fns/_lib/protectedTokens.mjs","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/date-fns/transpose.mjs","../node_modules/date-fns/parse/_lib/Setter.mjs","../node_modules/date-fns/parse/_lib/Parser.mjs","../node_modules/date-fns/constants.mjs","../node_modules/date-fns/parse/_lib/constants.mjs","../node_modules/date-fns/parse/_lib/utils.mjs","../node_modules/date-fns/startOfWeek.mjs","../node_modules/date-fns/getWeekYear.mjs","../node_modules/date-fns/startOfISOWeek.mjs","../node_modules/date-fns/startOfWeekYear.mjs","../node_modules/date-fns/getWeek.mjs","../node_modules/date-fns/setWeek.mjs","../node_modules/date-fns/getISOWeekYear.mjs","../node_modules/date-fns/startOfISOWeekYear.mjs","../node_modules/date-fns/getISOWeek.mjs","../node_modules/date-fns/setISOWeek.mjs","../node_modules/date-fns/parse/_lib/parsers/DateParser.mjs","../node_modules/date-fns/addDays.mjs","../node_modules/date-fns/setDay.mjs","../node_modules/date-fns/getISODay.mjs","../node_modules/date-fns/setISODay.mjs","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs","../node_modules/date-fns/parse/_lib/parsers.mjs","../node_modules/date-fns/parse/_lib/parsers/EraParser.mjs","../node_modules/date-fns/parse/_lib/parsers/YearParser.mjs","../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.mjs","../node_modules/date-fns/parse/_lib/parsers/QuarterParser.mjs","../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs","../node_modules/date-fns/parse/_lib/parsers/MonthParser.mjs","../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs","../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.mjs","../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.mjs","../node_modules/date-fns/parse/_lib/parsers/DayParser.mjs","../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.mjs","../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ISODayParser.mjs","../node_modules/date-fns/parse/_lib/parsers/AMPMParser.mjs","../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs","../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.mjs","../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.mjs","../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.mjs","../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.mjs","../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.mjs","../node_modules/date-fns/parse/_lib/parsers/MinuteParser.mjs","../node_modules/date-fns/parse/_lib/parsers/SecondParser.mjs","../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs","../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs","../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs","../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs","../node_modules/date-fns/parse.mjs","data/states.js","data/data_bar.js","components/PointIcon.jsx","components/MissingData.jsx","data/data_slope.js","../node_modules/@visx/group/esm/Group.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/internmap/src/index.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-color/src/math.js","../node_modules/d3-color/src/lab.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/hcl.js","../node_modules/d3-interpolate/src/hsl.js","../node_modules/d3-color/src/cubehelix.js","../node_modules/d3-interpolate/src/cubehelix.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/@visx/scale/esm/utils/createColorInterpolator.js","../node_modules/d3-interpolate/src/lab.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/year.js","../node_modules/@visx/scale/esm/utils/isUtcScale.js","../node_modules/@visx/scale/esm/operators/nice.js","../node_modules/d3-interpolate/src/round.js","../node_modules/@visx/scale/esm/operators/scaleOperator.js","../node_modules/@visx/scale/esm/operators/domain.js","../node_modules/@visx/scale/esm/operators/zero.js","../node_modules/@visx/scale/esm/operators/interpolate.js","../node_modules/@visx/scale/esm/operators/round.js","../node_modules/@visx/scale/esm/operators/align.js","../node_modules/@visx/scale/esm/operators/base.js","../node_modules/@visx/scale/esm/operators/clamp.js","../node_modules/@visx/scale/esm/operators/constant.js","../node_modules/@visx/scale/esm/operators/exponent.js","../node_modules/@visx/scale/esm/operators/padding.js","../node_modules/@visx/scale/esm/operators/range.js","../node_modules/@visx/scale/esm/operators/reverse.js","../node_modules/@visx/scale/esm/operators/unknown.js","../node_modules/@visx/scale/esm/scales/point.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/number.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-scale/src/linear.js","../node_modules/@visx/scale/esm/scales/linear.js","../node_modules/react-use-measure/dist/web.js","../node_modules/d3-array/src/identity.js","../node_modules/d3-array/src/group.js","../node_modules/@visx/scale/esm/utils/getTicks.js","../node_modules/@visx/scale/esm/utils/coerceNumber.js","../node_modules/@visx/shape/esm/shapes/Line.js","../node_modules/@visx/text/esm/util/getStringWidth.js","../node_modules/@visx/text/esm/hooks/useText.js","../node_modules/@visx/text/esm/Text.js","../node_modules/@visx/axis/esm/constants/orientation.js","../node_modules/@visx/axis/esm/axis/Ticks.js","../node_modules/@visx/axis/esm/axis/AxisRenderer.js","../node_modules/@visx/axis/esm/utils/getLabelTransform.js","../node_modules/@visx/scale/esm/utils/toString.js","../node_modules/@visx/point/esm/Point.js","../node_modules/@visx/axis/esm/utils/createPoint.js","../node_modules/@visx/axis/esm/utils/getAxisRangePaddingConfig.js","../node_modules/@visx/axis/esm/axis/Axis.js","../node_modules/@visx/axis/esm/utils/getTickFormatter.js","../node_modules/@visx/axis/esm/utils/getTickPosition.js","../node_modules/@visx/axis/esm/axis/AxisBottom.js","../node_modules/@visx/axis/esm/axis/AxisLeft.js","../node_modules/@visx/grid/esm/utils/getScaleBandwidth.js","../node_modules/@visx/grid/esm/grids/GridColumns.js","../node_modules/d3-path/src/path.js","../node_modules/@visx/shape/node_modules/d3-shape/src/constant.js","../node_modules/@visx/shape/node_modules/d3-shape/src/curve/linear.js","../node_modules/@visx/shape/node_modules/d3-shape/src/point.js","../node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js","../node_modules/@visx/shape/esm/util/D3ShapeFactories.js","../node_modules/@visx/shape/node_modules/d3-shape/src/line.js","../node_modules/@visx/shape/esm/shapes/LinePath.js","../node_modules/framer-motion/dist/es/utils/is-browser.mjs","../node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../node_modules/framer-motion/dist/es/utils/use-is-mounted.mjs","../node_modules/framer-motion/dist/es/utils/noop.mjs","../node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","../node_modules/framer-motion/dist/es/frameloop/render-step.mjs","../node_modules/framer-motion/dist/es/frameloop/batcher.mjs","../node_modules/framer-motion/dist/es/frameloop/frame.mjs","../node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../node_modules/framer-motion/dist/es/utils/use-constant.mjs","../node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/utils/errors.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../node_modules/framer-motion/dist/es/utils/use-force-update.mjs","../node_modules/framer-motion/dist/es/utils/use-unmount-effect.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../node_modules/framer-motion/dist/es/context/LazyContext.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../node_modules/framer-motion/dist/es/frameloop/microtask.mjs","../node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../node_modules/framer-motion/dist/es/motion/index.mjs","../node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../node_modules/framer-motion/dist/es/render/dom/motion-proxy.mjs","../node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../node_modules/framer-motion/dist/es/render/html/utils/transform.mjs","../node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","../node_modules/framer-motion/dist/es/utils/clamp.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","../node_modules/framer-motion/dist/es/value/types/utils.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/html/use-props.mjs","../node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../node_modules/framer-motion/dist/es/utils/resolve-value.mjs","../node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","../node_modules/framer-motion/dist/es/render/html/config-motion.mjs","../node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs","../node_modules/framer-motion/dist/es/events/event-info.mjs","../node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../node_modules/framer-motion/dist/es/utils/pipe.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs","../node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../node_modules/framer-motion/dist/es/gestures/hover.mjs","../node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs","../node_modules/framer-motion/dist/es/gestures/press.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../node_modules/framer-motion/dist/es/gestures/focus.mjs","../node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../node_modules/framer-motion/dist/es/utils/time-conversion.mjs","../node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../node_modules/framer-motion/dist/es/animation/utils/transitions.mjs","../node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../node_modules/framer-motion/dist/es/frameloop/sync-time.mjs","../node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","../node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","../node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.mjs","../node_modules/framer-motion/dist/es/value/types/color/utils.mjs","../node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","../node_modules/framer-motion/dist/es/value/types/color/hex.mjs","../node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","../node_modules/framer-motion/dist/es/value/types/color/index.mjs","../node_modules/framer-motion/dist/es/value/types/complex/index.mjs","../node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","../node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs","../node_modules/framer-motion/dist/es/utils/memo.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","../node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/can-animate.mjs","../node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","../node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","../node_modules/framer-motion/dist/es/easing/ease.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","../node_modules/framer-motion/dist/es/easing/circ.mjs","../node_modules/framer-motion/dist/es/easing/back.mjs","../node_modules/framer-motion/dist/es/easing/utils/map.mjs","../node_modules/framer-motion/dist/es/easing/anticipate.mjs","../node_modules/framer-motion/dist/es/utils/progress.mjs","../node_modules/framer-motion/dist/es/utils/mix/number.mjs","../node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","../node_modules/framer-motion/dist/es/utils/mix/immediate.mjs","../node_modules/framer-motion/dist/es/utils/mix/color.mjs","../node_modules/framer-motion/dist/es/utils/mix/visibility.mjs","../node_modules/framer-motion/dist/es/utils/mix/complex.mjs","../node_modules/framer-motion/dist/es/utils/mix/index.mjs","../node_modules/framer-motion/dist/es/utils/interpolate.mjs","../node_modules/framer-motion/dist/es/utils/offsets/default.mjs","../node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","../node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","../node_modules/framer-motion/dist/es/utils/offsets/time.mjs","../node_modules/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs","../node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/easing.mjs","../node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","../node_modules/framer-motion/dist/es/render/dom/scroll/supports.mjs","../node_modules/framer-motion/dist/es/animation/GroupPlaybackControls.mjs","../node_modules/framer-motion/dist/es/render/dom/scroll/observe.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../node_modules/framer-motion/dist/es/utils/array.mjs","../node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","../node_modules/framer-motion/dist/es/value/index.mjs","../node_modules/framer-motion/dist/es/render/utils/setters.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../node_modules/framer-motion/dist/es/motion/features/animations.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../node_modules/framer-motion/dist/es/utils/distance.mjs","../node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../node_modules/framer-motion/dist/es/projection/node/state.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../node_modules/framer-motion/dist/es/debug/record.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","../node_modules/framer-motion/dist/es/utils/delay.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/single-value.mjs","../node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../node_modules/framer-motion/dist/es/motion/features/drag.mjs","../node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../node_modules/framer-motion/dist/es/render/store.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","../node_modules/framer-motion/dist/es/render/VisualElement.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../node_modules/framer-motion/dist/es/render/dom/motion.mjs","../node_modules/framer-motion/dist/es/motion/features/layout.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/create-config.mjs","../node_modules/@visx/event/esm/getXAndYFromEvent.js","../node_modules/@visx/event/esm/localPointGeneric.js","../node_modules/@visx/event/esm/typeGuards.js","../node_modules/@visx/event/esm/localPoint.js","../node_modules/robust-predicates/esm/util.js","../node_modules/robust-predicates/esm/orient2d.js","../node_modules/robust-predicates/esm/orient3d.js","../node_modules/robust-predicates/esm/incircle.js","../node_modules/robust-predicates/esm/insphere.js","../node_modules/delaunator/index.js","../node_modules/d3-delaunay/src/path.js","../node_modules/d3-delaunay/src/polygon.js","../node_modules/d3-delaunay/src/voronoi.js","../node_modules/d3-delaunay/src/delaunay.js","components/SlopeChart.jsx","../node_modules/@visx/delaunay/esm/voronoi.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-array/src/fsum.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/equalEarth.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/graticule.js","../node_modules/@visx/geo/esm/graticule/Graticule.js","../node_modules/@visx/geo/esm/projections/Projection.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/@visx/geo/esm/projections/AlbersUsa.js","../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/feature.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/reverse.js","../node_modules/d3-array/src/max.js","../node_modules/textures/dist/textures.esm.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/select.js","../node_modules/@visx/marker/esm/markers/Marker.js","../node_modules/@visx/marker/esm/markers/Arrow.js","../node_modules/@visx/tooltip/esm/hooks/useTooltip.js","../node_modules/@visx/bounds/esm/enhancers/withBoundingRects.js","../node_modules/@visx/tooltip/esm/tooltips/Tooltip.js","../node_modules/@visx/tooltip/esm/context/TooltipPositionContext.js","../node_modules/@visx/tooltip/esm/tooltips/TooltipWithBounds.js","../node_modules/lucide-react/src/icons/arrow-right.ts","components/InteractionBubble.jsx","components/FlowMap.jsx","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@doist/react-interpolate/dist/react-interpolate.mjs","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","components/UsMap.jsx","components/ShareIcon.jsx","components/ShareChartButton.jsx","../node_modules/lucide-react/src/icons/download.ts","components/DownloadDataButton.jsx","components/SectionSubtitle.jsx","../node_modules/@radix-ui/react-separator/src/Separator.tsx","components/ui/separator.jsx","../node_modules/@radix-ui/react-use-previous/src/usePrevious.tsx","../node_modules/@radix-ui/react-use-size/src/useSize.tsx","../node_modules/@radix-ui/react-switch/src/Switch.tsx","components/ui/switch.jsx","components/FlowToggle.jsx","../node_modules/@radix-ui/number/src/number.ts","../node_modules/@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx","../node_modules/@radix-ui/react-use-escape-keydown/src/useEscapeKeydown.tsx","../node_modules/@radix-ui/react-focus-guards/src/FocusGuards.tsx","../node_modules/@radix-ui/react-focus-scope/src/FocusScope.tsx","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../node_modules/@radix-ui/react-arrow/src/Arrow.tsx","../node_modules/@radix-ui/react-popper/src/Popper.tsx","../node_modules/@radix-ui/react-portal/src/Portal.tsx","../node_modules/@radix-ui/react-visually-hidden/src/VisuallyHidden.tsx","../node_modules/aria-hidden/dist/es2015/index.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/UI.js","../node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/get-nonce/dist/es2015/index.js","../node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/@radix-ui/react-select/src/Select.tsx","../node_modules/lucide-react/src/icons/chevron-up.ts","../node_modules/lucide-react/src/icons/check.ts","components/ui/titleselect.jsx","components/TitleStateSelect.jsx","components/InterstateTravelSection.jsx","../node_modules/lucide-react/src/icons/cross.ts","../node_modules/lucide-react/src/icons/arrow-big-up.ts","../node_modules/lucide-react/src/icons/arrow-big-down.ts","../node_modules/lucide-react/src/icons/link.ts","components/MetricCard.jsx","components/UsIcon.jsx","components/GavelIcon.jsx","components/PillIcon.jsx","lib/fetchLiveData.js","components/MetricsSection.jsx","../node_modules/@visx/scale/esm/scales/band.js","../node_modules/date-fns/startOfDay.mjs","../node_modules/date-fns/differenceInCalendarDays.mjs","../node_modules/date-fns/startOfYear.mjs","../node_modules/date-fns/getDayOfYear.mjs","../node_modules/date-fns/_lib/addLeadingZeros.mjs","../node_modules/date-fns/_lib/format/lightFormatters.mjs","../node_modules/date-fns/_lib/format/formatters.mjs","../node_modules/date-fns/isDate.mjs","../node_modules/date-fns/isValid.mjs","../node_modules/date-fns/format.mjs","../node_modules/date-fns/isWithinInterval.mjs","../node_modules/framer-motion/dist/es/components/MotionConfig/index.mjs","components/MotionRect.jsx","../node_modules/@visx/grid/esm/grids/GridRows.js","../node_modules/hyphenate-style-name/index.js","../node_modules/shallow-equal/src/objects.ts","../node_modules/react-responsive/src/mediaQuery.ts","../node_modules/react-responsive/src/toQuery.ts","../node_modules/react-responsive/src/Context.ts","../node_modules/react-responsive/src/useMediaQuery.ts","components/MonthlyChart.jsx","../node_modules/lucide-react/src/icons/chevrons-right.ts","components/ui/select.jsx","components/StateSelect.jsx","components/UncertaintyIntervalIcon.jsx","components/EstimatesChartLegend.jsx","components/EstimatesToggle.jsx","components/MonthlyChartSection.jsx","components/NavItem.jsx","components/NavBar.jsx","components/PolicySection.jsx","lib/useKeyPress.js","../node_modules/lucide-react/src/icons/chevron-left.ts","../node_modules/lucide-react/src/icons/chevron-right.ts","../node_modules/lucide-react/src/icons/mouse.ts","components/Stepper.jsx","components/WaveBackground.jsx","data/steps.js","../node_modules/date-fns/isSameMonth.mjs","../node_modules/date-fns/isSameYear.mjs","../node_modules/@radix-ui/react-slider/src/Slider.tsx","components/Slider.jsx","components/DateSlider.jsx","components/StepperText.jsx","components/OpeningText.jsx","components/OpenerDesktop.jsx","App.js","../node_modules/d3-array/src/mean.js","../node_modules/d3-array/src/sum.js","index.js"],"sourcesContent":["\"use strict\";\n\nexports.__esModule = true;\nexports.default = Line;\nvar _react = _interopRequireDefault(require(\"react\"));\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\nvar _excluded = [\"from\", \"to\", \"fill\", \"className\", \"innerRef\"];\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction Line(_ref) {\n  var _ref$from = _ref.from,\n    from = _ref$from === void 0 ? {\n      x: 0,\n      y: 0\n    } : _ref$from,\n    _ref$to = _ref.to,\n    to = _ref$to === void 0 ? {\n      x: 1,\n      y: 1\n    } : _ref$to,\n    _ref$fill = _ref.fill,\n    fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n    className = _ref.className,\n    innerRef = _ref.innerRef,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var isRectilinear = from.x === to.x || from.y === to.y;\n  return /*#__PURE__*/_react.default.createElement(\"line\", _extends({\n    ref: innerRef,\n    className: (0, _classnames.default)('visx-line', className),\n    x1: from.x,\n    y1: from.y,\n    x2: to.x,\n    y2: to.y,\n    fill: fill,\n    shapeRendering: isRectilinear ? 'crispEdges' : 'auto'\n  }, restProps));\n}","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\nexports.match = matchQuery;\nexports.parse = parseQuery;\n\n// -----------------------------------------------------------------------------\n\nvar RE_MEDIA_QUERY     = /(?:(only|not)?\\s*([^\\s\\(\\)]+)(?:\\s*and)?\\s*)?(.+)?/i,\n    RE_MQ_EXPRESSION   = /\\(\\s*([^\\s\\:\\)]+)\\s*(?:\\:\\s*([^\\s\\)]+))?\\s*\\)/,\n    RE_MQ_FEATURE      = /^(?:(min|max)-)?(.+)/,\n    RE_LENGTH_UNIT     = /(em|rem|px|cm|mm|in|pt|pc)?$/,\n    RE_RESOLUTION_UNIT = /(dpi|dpcm|dppx)?$/;\n\nfunction matchQuery(mediaQuery, values) {\n    return parseQuery(mediaQuery).some(function (query) {\n        var inverse = query.inverse;\n\n        // Either the parsed or specified `type` is \"all\", or the types must be\n        // equal for a match.\n        var typeMatch = query.type === 'all' || values.type === query.type;\n\n        // Quit early when `type` doesn't match, but take \"not\" into account.\n        if ((typeMatch && inverse) || !(typeMatch || inverse)) {\n            return false;\n        }\n\n        var expressionsMatch = query.expressions.every(function (expression) {\n            var feature  = expression.feature,\n                modifier = expression.modifier,\n                expValue = expression.value,\n                value    = values[feature];\n\n            // Missing or falsy values don't match.\n            if (!value) { return false; }\n\n            switch (feature) {\n                case 'orientation':\n                case 'scan':\n                    return value.toLowerCase() === expValue.toLowerCase();\n\n                case 'width':\n                case 'height':\n                case 'device-width':\n                case 'device-height':\n                    expValue = toPx(expValue);\n                    value    = toPx(value);\n                    break;\n\n                case 'resolution':\n                    expValue = toDpi(expValue);\n                    value    = toDpi(value);\n                    break;\n\n                case 'aspect-ratio':\n                case 'device-aspect-ratio':\n                case /* Deprecated */ 'device-pixel-ratio':\n                    expValue = toDecimal(expValue);\n                    value    = toDecimal(value);\n                    break;\n\n                case 'grid':\n                case 'color':\n                case 'color-index':\n                case 'monochrome':\n                    expValue = parseInt(expValue, 10) || 1;\n                    value    = parseInt(value, 10) || 0;\n                    break;\n            }\n\n            switch (modifier) {\n                case 'min': return value >= expValue;\n                case 'max': return value <= expValue;\n                default   : return value === expValue;\n            }\n        });\n\n        return (expressionsMatch && !inverse) || (!expressionsMatch && inverse);\n    });\n}\n\nfunction parseQuery(mediaQuery) {\n    return mediaQuery.split(',').map(function (query) {\n        query = query.trim();\n\n        var captures    = query.match(RE_MEDIA_QUERY),\n            modifier    = captures[1],\n            type        = captures[2],\n            expressions = captures[3] || '',\n            parsed      = {};\n\n        parsed.inverse = !!modifier && modifier.toLowerCase() === 'not';\n        parsed.type    = type ? type.toLowerCase() : 'all';\n\n        // Split expressions into a list.\n        expressions = expressions.match(/\\([^\\)]+\\)/g) || [];\n\n        parsed.expressions = expressions.map(function (expression) {\n            var captures = expression.match(RE_MQ_EXPRESSION),\n                feature  = captures[1].toLowerCase().match(RE_MQ_FEATURE);\n\n            return {\n                modifier: feature[1],\n                feature : feature[2],\n                value   : captures[2]\n            };\n        });\n\n        return parsed;\n    });\n}\n\n// -- Utilities ----------------------------------------------------------------\n\nfunction toDecimal(ratio) {\n    var decimal = Number(ratio),\n        numbers;\n\n    if (!decimal) {\n        numbers = ratio.match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n        decimal = numbers[1] / numbers[2];\n    }\n\n    return decimal;\n}\n\nfunction toDpi(resolution) {\n    var value = parseFloat(resolution),\n        units = String(resolution).match(RE_RESOLUTION_UNIT)[1];\n\n    switch (units) {\n        case 'dpcm': return value / 2.54;\n        case 'dppx': return value * 96;\n        default    : return value;\n    }\n}\n\nfunction toPx(length) {\n    var value = parseFloat(length),\n        units = String(length).match(RE_LENGTH_UNIT)[1];\n\n    switch (units) {\n        case 'em' : return value * 16;\n        case 'rem': return value * 16;\n        case 'cm' : return value * 96 / 2.54;\n        case 'mm' : return value * 96 / 2.54 / 10;\n        case 'in' : return value * 96;\n        case 'pt' : return value * 72;\n        case 'pc' : return value * 72 / 12;\n        default   : return value;\n    }\n}\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n  var timeout, args, context, timestamp, result;\n  if (null == wait) wait = 100;\n\n  function later() {\n    var last = Date.now() - timestamp;\n\n    if (last < wait && last >= 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      if (!immediate) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n    }\n  };\n\n  var debounced = function(){\n    context = this;\n    args = arguments;\n    timestamp = Date.now();\n    var callNow = immediate && !timeout;\n    if (!timeout) timeout = setTimeout(later, wait);\n    if (callNow) {\n      result = func.apply(context, args);\n      context = args = null;\n    }\n\n    return result;\n  };\n\n  debounced.clear = function() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n  \n  debounced.flush = function() {\n    if (timeout) {\n      result = func.apply(context, args);\n      context = args = null;\n      \n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n\n  return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","/**\n * SVG elements are case-sensitive.\n *\n * @see https://developer.mozilla.org/docs/Web/SVG/Element#svg_elements_a_to_z\n */\nexport const CASE_SENSITIVE_TAG_NAMES = [\n  'animateMotion',\n  'animateTransform',\n  'clipPath',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDropShadow',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n  'foreignObject',\n  'linearGradient',\n  'radialGradient',\n  'textPath',\n] as const;\n\nexport const CASE_SENSITIVE_TAG_NAMES_MAP = CASE_SENSITIVE_TAG_NAMES.reduce(\n  (accumulator, tagName) => {\n    accumulator[tagName.toLowerCase()] = tagName;\n    return accumulator;\n  },\n  {} as Record<string, string>,\n);\n","// constants\nconst HTML = 'html';\nconst HEAD = 'head';\nconst BODY = 'body';\nconst FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>\n\n// match-all-characters in case of newlines (DOTALL)\nconst HEAD_TAG_REGEX = /<head[^]*>/i;\nconst BODY_TAG_REGEX = /<body[^]*>/i;\n\n// falls back to `parseFromString` if `createHTMLDocument` cannot be used\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nlet parseFromDocument = (html: string, tagName?: string): Document => {\n  /* istanbul ignore next */\n  throw new Error(\n    'This browser does not support `document.implementation.createHTMLDocument`',\n  );\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nlet parseFromString = (html: string, tagName?: string): Document => {\n  /* istanbul ignore next */\n  throw new Error(\n    'This browser does not support `DOMParser.prototype.parseFromString`',\n  );\n};\n\nconst DOMParser = typeof window === 'object' && window.DOMParser;\n\n/**\n * DOMParser (performance: slow).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document\n */\nif (typeof DOMParser === 'function') {\n  const domParser = new DOMParser();\n  const mimeType = 'text/html';\n\n  /**\n   * Creates an HTML document using `DOMParser.parseFromString`.\n   *\n   * @param html - The HTML string.\n   * @param tagName - The element to render the HTML (with 'body' as fallback).\n   * @returns - Document.\n   */\n  parseFromString = (html: string, tagName?: string): Document => {\n    if (tagName) {\n      /* istanbul ignore next */\n      html = `<${tagName}>${html}</${tagName}>`;\n    }\n\n    return domParser.parseFromString(html, mimeType);\n  };\n\n  parseFromDocument = parseFromString;\n}\n\n/**\n * DOMImplementation (performance: fair).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument\n */\nif (typeof document === 'object' && document.implementation) {\n  const htmlDocument = document.implementation.createHTMLDocument();\n\n  /**\n   * Use HTML document created by `document.implementation.createHTMLDocument`.\n   *\n   * @param html - The HTML string.\n   * @param tagName - The element to render the HTML (with 'body' as fallback).\n   * @returns - Document\n   */\n  parseFromDocument = function (html: string, tagName?: string): Document {\n    if (tagName) {\n      const element = htmlDocument.documentElement.querySelector(tagName);\n\n      if (element) {\n        element.innerHTML = html;\n      }\n\n      return htmlDocument;\n    }\n\n    htmlDocument.documentElement.innerHTML = html;\n    return htmlDocument;\n  };\n}\n\n/**\n * Template (performance: fast).\n *\n * @see https://developer.mozilla.org/docs/Web/HTML/Element/template\n */\nconst template =\n  typeof document === 'object' && document.createElement('template');\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nlet parseFromTemplate: (html: string) => NodeList;\n\nif (template && template.content) {\n  /**\n   * Uses a template element (content fragment) to parse HTML.\n   *\n   * @param html - HTML string.\n   * @returns - Nodes.\n   */\n  parseFromTemplate = (html: string): NodeList => {\n    template.innerHTML = html;\n    return template.content.childNodes;\n  };\n}\n\n/**\n * Parses HTML string to DOM nodes.\n *\n * @param html - HTML markup.\n * @returns - DOM nodes.\n */\nexport default function domparser(html: string): NodeList {\n  const match = html.match(FIRST_TAG_REGEX);\n  const firstTagName = match && match[1] ? match[1].toLowerCase() : '';\n\n  switch (firstTagName) {\n    case HTML: {\n      const doc = parseFromString(html);\n\n      // the created document may come with filler head/body elements,\n      // so make sure to remove them if they don't actually exist\n      if (!HEAD_TAG_REGEX.test(html)) {\n        const element = doc.querySelector(HEAD);\n        element?.parentNode?.removeChild(element);\n      }\n\n      if (!BODY_TAG_REGEX.test(html)) {\n        const element = doc.querySelector(BODY);\n        element?.parentNode?.removeChild(element);\n      }\n\n      return doc.querySelectorAll(HTML);\n    }\n\n    case HEAD:\n    case BODY: {\n      const elements = parseFromDocument(html).querySelectorAll(firstTagName);\n\n      // if there's a sibling element, then return both elements\n      if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {\n        return elements[0].parentNode!.childNodes;\n      }\n\n      return elements;\n    }\n\n    // low-level tag or text\n    default: {\n      if (parseFromTemplate) {\n        return parseFromTemplate(html);\n      }\n      const element = parseFromDocument(html, BODY).querySelector(BODY);\n      return element!.childNodes;\n    }\n  }\n}\n","import domparser from './domparser';\nimport { formatDOM } from './utilities';\n\nconst DIRECTIVE_REGEX = /<(![a-zA-Z\\s]+)>/; // e.g., <!doctype html>\n\n/**\n * Parses HTML string to DOM nodes in browser.\n *\n * @param html - HTML markup.\n * @returns - DOM elements.\n */\nexport default function HTMLDOMParser(html: string) {\n  if (typeof html !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!html) {\n    return [];\n  }\n\n  // match directive\n  const match = html.match(DIRECTIVE_REGEX);\n  const directive = match ? match[1] : undefined;\n\n  return formatDOM(domparser(html), null, directive);\n}\n","import { Comment, Element, ProcessingInstruction, Text } from 'domhandler';\n\nimport { CASE_SENSITIVE_TAG_NAMES_MAP } from './constants';\nimport type { DOMNode } from '../types';\n\n/**\n * Gets case-sensitive tag name.\n *\n * @param tagName - Tag name in lowercase.\n * @returns - Case-sensitive tag name.\n */\nfunction getCaseSensitiveTagName(tagName: string): string | undefined {\n  return CASE_SENSITIVE_TAG_NAMES_MAP[tagName];\n}\n\n/**\n * Formats DOM attributes to a hash map.\n *\n * @param attributes - List of attributes.\n * @returns - Map of attribute name to value.\n */\nexport function formatAttributes(attributes: NamedNodeMap) {\n  const map: Record<string, string> = {};\n  let index = 0;\n  const attributesLength = attributes.length;\n\n  // `NamedNodeMap` is array-like\n  for (; index < attributesLength; index++) {\n    const attribute = attributes[index];\n    map[attribute.name] = attribute.value;\n  }\n\n  return map;\n}\n\n/**\n * Corrects the tag name if it is case-sensitive (SVG).\n * Otherwise, returns the lowercase tag name (HTML).\n *\n * @param tagName - Lowercase tag name.\n * @returns - Formatted tag name.\n */\nfunction formatTagName(tagName: string): string {\n  tagName = tagName.toLowerCase();\n  const caseSensitiveTagName = getCaseSensitiveTagName(tagName);\n\n  if (caseSensitiveTagName) {\n    return caseSensitiveTagName;\n  }\n\n  return tagName;\n}\n\n/**\n * Transforms DOM nodes to `domhandler` nodes.\n *\n * @param nodes - DOM nodes.\n * @param parent - Parent node.\n * @param directive - Directive.\n * @returns - Nodes.\n */\nexport function formatDOM(\n  nodes: NodeList,\n  parent: DOMNode | null = null,\n  directive?: string,\n): DOMNode[] {\n  const domNodes = [];\n  let current;\n  let index = 0;\n  const nodesLength = nodes.length;\n\n  for (; index < nodesLength; index++) {\n    const node = nodes[index];\n\n    // set the node data given the type\n    switch (node.nodeType) {\n      case 1: {\n        const tagName = formatTagName(node.nodeName);\n\n        // script, style, or tag\n        current = new Element(\n          tagName,\n          formatAttributes((node as HTMLElement).attributes),\n        );\n\n        current.children = formatDOM(\n          // template children are on content\n          tagName === 'template'\n            ? (node as HTMLTemplateElement).content.childNodes\n            : node.childNodes,\n          current,\n        );\n\n        break;\n      }\n\n      case 3:\n        current = new Text(node.nodeValue!);\n        break;\n\n      case 8:\n        current = new Comment(node.nodeValue!);\n        break;\n\n      default:\n        continue;\n    }\n\n    // set previous node next\n    const prev = domNodes[index - 1] || null;\n    if (prev) {\n      prev.next = current;\n    }\n\n    // set properties for current node\n    current.parent = parent as Element;\n    current.prev = prev;\n    current.next = null;\n\n    domNodes.push(current);\n  }\n\n  if (directive) {\n    current = new ProcessingInstruction(\n      directive.substring(0, directive.indexOf(' ')).toLowerCase(),\n      directive,\n    );\n\n    current.next = domNodes[0] || null;\n    current.parent = parent as Element;\n    domNodes.unshift(current);\n\n    if (domNodes[1]) {\n      domNodes[1].prev = domNodes[0];\n    }\n  }\n\n  return domNodes;\n}\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 });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    function DomHandler(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new node_js_1.Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    DomHandler.prototype.onparserinit = function (parser) {\n        this.parser = parser;\n    };\n    // Resets the handler back to starting state\n    DomHandler.prototype.onreset = function () {\n        this.dom = [];\n        this.root = new node_js_1.Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    };\n    // Signals the handler that parsing is done\n    DomHandler.prototype.onend = function () {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    };\n    DomHandler.prototype.onerror = function (error) {\n        this.handleCallback(error);\n    };\n    DomHandler.prototype.onclosetag = function () {\n        this.lastNode = null;\n        var elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    };\n    DomHandler.prototype.onopentag = function (name, attribs) {\n        var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n        var element = new node_js_1.Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    };\n    DomHandler.prototype.ontext = function (data) {\n        var lastNode = this.lastNode;\n        if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n            lastNode.data += data;\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            var node = new node_js_1.Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    };\n    DomHandler.prototype.oncomment = function (data) {\n        if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        var node = new node_js_1.Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    };\n    DomHandler.prototype.oncommentend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.oncdatastart = function () {\n        var text = new node_js_1.Text(\"\");\n        var node = new node_js_1.CDATA([text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    };\n    DomHandler.prototype.oncdataend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.onprocessinginstruction = function (name, data) {\n        var node = new node_js_1.ProcessingInstruction(name, data);\n        this.addNode(node);\n    };\n    DomHandler.prototype.handleCallback = function (error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    };\n    DomHandler.prototype.addNode = function (node) {\n        var parent = this.tagStack[this.tagStack.length - 1];\n        var previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    };\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n    function Node() {\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    Object.defineProperty(Node.prototype, \"parentNode\", {\n        // Read-write aliases for properties\n        /**\n         * Same as {@link parent}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.parent;\n        },\n        set: function (parent) {\n            this.parent = parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"previousSibling\", {\n        /**\n         * Same as {@link prev}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.prev;\n        },\n        set: function (prev) {\n            this.prev = prev;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"nextSibling\", {\n        /**\n         * Same as {@link next}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.next;\n        },\n        set: function (next) {\n            this.next = next;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    Node.prototype.cloneNode = function (recursive) {\n        if (recursive === void 0) { recursive = false; }\n        return cloneNode(this, recursive);\n    };\n    return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n    __extends(DataNode, _super);\n    /**\n     * @param data The content of the data node\n     */\n    function DataNode(data) {\n        var _this = _super.call(this) || this;\n        _this.data = data;\n        return _this;\n    }\n    Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n        /**\n         * Same as {@link data}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.data;\n        },\n        set: function (data) {\n            this.data = data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Text;\n        return _this;\n    }\n    Object.defineProperty(Text.prototype, \"nodeType\", {\n        get: function () {\n            return 3;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Comment;\n        return _this;\n    }\n    Object.defineProperty(Comment.prototype, \"nodeType\", {\n        get: function () {\n            return 8;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n    __extends(ProcessingInstruction, _super);\n    function ProcessingInstruction(name, data) {\n        var _this = _super.call(this, data) || this;\n        _this.name = name;\n        _this.type = domelementtype_1.ElementType.Directive;\n        return _this;\n    }\n    Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n    __extends(NodeWithChildren, _super);\n    /**\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    function NodeWithChildren(children) {\n        var _this = _super.call(this) || this;\n        _this.children = children;\n        return _this;\n    }\n    Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n        // Aliases\n        /** First child of the node. */\n        get: function () {\n            var _a;\n            return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n        /** Last child of the node. */\n        get: function () {\n            return this.children.length > 0\n                ? this.children[this.children.length - 1]\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n        /**\n         * Same as {@link children}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.children;\n        },\n        set: function (children) {\n            this.children = children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n    __extends(CDATA, _super);\n    function CDATA() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.CDATA;\n        return _this;\n    }\n    Object.defineProperty(CDATA.prototype, \"nodeType\", {\n        get: function () {\n            return 4;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n    __extends(Document, _super);\n    function Document() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Root;\n        return _this;\n    }\n    Object.defineProperty(Document.prototype, \"nodeType\", {\n        get: function () {\n            return 9;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    function Element(name, attribs, children, type) {\n        if (children === void 0) { children = []; }\n        if (type === void 0) { type = name === \"script\"\n            ? domelementtype_1.ElementType.Script\n            : name === \"style\"\n                ? domelementtype_1.ElementType.Style\n                : domelementtype_1.ElementType.Tag; }\n        var _this = _super.call(this, children) || this;\n        _this.name = name;\n        _this.attribs = attribs;\n        _this.type = type;\n        return _this;\n    }\n    Object.defineProperty(Element.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"tagName\", {\n        // DOM Level 1 aliases\n        /**\n         * Same as {@link name}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.name;\n        },\n        set: function (name) {\n            this.name = name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"attributes\", {\n        get: function () {\n            var _this = this;\n            return Object.keys(this.attribs).map(function (name) {\n                var _a, _b;\n                return ({\n                    name: name,\n                    value: _this.attribs[name],\n                    namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                    prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n                });\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n    return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n    return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n    return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n    return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n    return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n    return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n    if (recursive === void 0) { recursive = false; }\n    var result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n        children.forEach(function (child) { return (child.parent = clone_1); });\n        if (node.namespace != null) {\n            clone_1.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n        }\n        result = clone_1;\n    }\n    else if (isCDATA(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_2 = new CDATA(children);\n        children.forEach(function (child) { return (child.parent = clone_2); });\n        result = clone_2;\n    }\n    else if (isDocument(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_3 = new Document(children);\n        children.forEach(function (child) { return (child.parent = clone_3); });\n        if (node[\"x-mode\"]) {\n            clone_3[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone_3;\n    }\n    else if (isDirective(node)) {\n        var instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(\"Not implemented yet: \".concat(node.type));\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n    var children = childs.map(function (child) { return cloneNode(child, true); });\n    for (var i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","import {\n  BOOLEAN,\n  OVERLOADED_BOOLEAN,\n  getPropertyInfo,\n  isCustomAttribute,\n  possibleStandardNames,\n} from 'react-property';\nimport { PRESERVE_CUSTOM_ATTRIBUTES, setStyleProp } from './utilities';\n\n// https://react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components\n// https://developer.mozilla.org/docs/Web/HTML/Attributes\nconst UNCONTROLLED_COMPONENT_ATTRIBUTES = ['checked', 'value'] as const;\nconst UNCONTROLLED_COMPONENT_NAMES = ['input', 'select', 'textarea'] as const;\n\ntype UncontrolledComponentAttributes =\n  (typeof UNCONTROLLED_COMPONENT_ATTRIBUTES)[number];\n\ntype UncontrolledComponentNames = (typeof UNCONTROLLED_COMPONENT_NAMES)[number];\n\nconst valueOnlyInputs = {\n  reset: true,\n  submit: true,\n} as const;\n\nexport type ValueOnlyInputsKeys = keyof typeof valueOnlyInputs;\n\nexport type Attributes = Record<PropertyKey, string>;\n\nexport type Props = Record<PropertyKey, string | boolean> & {\n  dangerouslySetInnerHTML?: {\n    __html: string;\n  };\n  key?: string | number;\n  style?: Record<PropertyKey, string>;\n};\n\n/**\n * Converts HTML/SVG DOM attributes to React props.\n *\n * @param attributes - HTML/SVG DOM attributes.\n * @param nodeName - DOM node name.\n * @returns - React props.\n */\nexport default function attributesToProps(\n  attributes: Attributes = {},\n  nodeName?: string,\n): Props {\n  const props: Props = {};\n\n  const isInputValueOnly = Boolean(\n    attributes.type && valueOnlyInputs[attributes.type as ValueOnlyInputsKeys],\n  );\n\n  for (const attributeName in attributes) {\n    const attributeValue = attributes[attributeName];\n\n    // ARIA (aria-*) or custom data (data-*) attribute\n    if (isCustomAttribute(attributeName)) {\n      props[attributeName] = attributeValue;\n      continue;\n    }\n\n    // convert HTML/SVG attribute to React prop\n    const attributeNameLowerCased = attributeName.toLowerCase();\n    let propName = getPropName(attributeNameLowerCased);\n\n    if (propName) {\n      const propertyInfo = getPropertyInfo(propName);\n\n      // convert attribute to uncontrolled component prop (e.g., `value` to `defaultValue`)\n      if (\n        UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(\n          propName as UncontrolledComponentAttributes,\n        ) &&\n        UNCONTROLLED_COMPONENT_NAMES.includes(\n          nodeName! as UncontrolledComponentNames,\n        ) &&\n        !isInputValueOnly\n      ) {\n        propName = getPropName('default' + attributeNameLowerCased);\n      }\n\n      props[propName] = attributeValue;\n\n      switch (propertyInfo && propertyInfo.type) {\n        case BOOLEAN:\n          props[propName] = true;\n          break;\n        case OVERLOADED_BOOLEAN:\n          if (attributeValue === '') {\n            props[propName] = true;\n          }\n          break;\n      }\n      continue;\n    }\n\n    // preserve custom attribute if React >=16\n    if (PRESERVE_CUSTOM_ATTRIBUTES) {\n      props[attributeName] = attributeValue;\n    }\n  }\n\n  // transform inline style to object\n  setStyleProp(attributes.style, props);\n\n  return props;\n}\n\n/**\n * Gets prop name from lowercased attribute name.\n *\n * @param attributeName - Lowercased attribute name.\n * @returns - Prop name.\n */\nfunction getPropName(attributeName: string): string {\n  return possibleStandardNames[attributeName];\n}\n","import { cloneElement, createElement, isValidElement } from 'react';\nimport type { JSX } from 'react';\nimport type { Element, DOMNode, Text } from 'html-dom-parser';\n\nimport attributesToProps from './attributes-to-props';\nimport type { Props } from './attributes-to-props';\nimport {\n  PRESERVE_CUSTOM_ATTRIBUTES,\n  canTextBeChildOfNode,\n  isCustomComponent,\n  returnFirstArg,\n  setStyleProp,\n} from './utilities';\n\nimport type { HTMLReactParserOptions } from './types';\n\nconst React = {\n  cloneElement,\n  createElement,\n  isValidElement,\n} as const;\n\n/**\n * Converts DOM nodes to JSX element(s).\n *\n * @param nodes - DOM nodes.\n * @param options - Options.\n * @returns - String or JSX element(s).\n */\nexport default function domToReact(\n  nodes: DOMNode[],\n  options: HTMLReactParserOptions = {},\n): string | JSX.Element | JSX.Element[] {\n  const reactElements = [];\n\n  const hasReplace = typeof options.replace === 'function';\n  const transform = options.transform || returnFirstArg;\n  const { cloneElement, createElement, isValidElement } =\n    options.library || React;\n\n  const nodesLength = nodes.length;\n\n  for (let index = 0; index < nodesLength; index++) {\n    const node = nodes[index];\n\n    // replace with custom React element (if present)\n    if (hasReplace) {\n      let replaceElement = options.replace!(node, index) as JSX.Element;\n\n      if (isValidElement(replaceElement)) {\n        // set \"key\" prop for sibling elements\n        // https://react.dev/learn/rendering-lists#rules-of-keys\n        if (nodesLength > 1) {\n          replaceElement = cloneElement(replaceElement, {\n            key: replaceElement.key || index,\n          });\n        }\n\n        reactElements.push(transform(replaceElement, node, index));\n        continue;\n      }\n    }\n\n    if (node.type === 'text') {\n      const isWhitespace = !node.data.trim().length;\n\n      // We have a whitespace node that can't be nested in its parent\n      // so skip it\n      if (\n        isWhitespace &&\n        node.parent &&\n        !canTextBeChildOfNode(node.parent as Element)\n      ) {\n        continue;\n      }\n\n      // Trim is enabled and we have a whitespace node\n      // so skip it\n      if (options.trim && isWhitespace) {\n        continue;\n      }\n\n      // We have a text node that's not whitespace and it can be nested\n      // in its parent so add it to the results\n      reactElements.push(transform(node.data, node, index));\n      continue;\n    }\n\n    const element = node as Element;\n    let props: Props = {};\n\n    if (skipAttributesToProps(element)) {\n      setStyleProp(element.attribs.style, element.attribs);\n      props = element.attribs;\n    } else if (element.attribs) {\n      props = attributesToProps(element.attribs, element.name);\n    }\n\n    let children: ReturnType<typeof domToReact> | undefined;\n\n    switch (node.type) {\n      case 'script':\n      case 'style':\n        // prevent text in <script> or <style> from being escaped\n        // https://react.dev/reference/react-dom/components/common#dangerously-setting-the-inner-html\n        if (node.children[0]) {\n          props.dangerouslySetInnerHTML = {\n            __html: (node.children[0] as Text).data,\n          };\n        }\n        break;\n\n      case 'tag':\n        // setting textarea value in children is an antipattern in React\n        // https://react.dev/reference/react-dom/components/textarea#caveats\n        if (node.name === 'textarea' && node.children[0]) {\n          props.defaultValue = (node.children[0] as Text).data;\n        } else if (node.children && node.children.length) {\n          // continue recursion of creating React elements (if applicable)\n          children = domToReact(node.children as Text[], options);\n        }\n        break;\n\n      // skip all other cases (e.g., comment)\n      default:\n        continue;\n    }\n\n    // set \"key\" prop for sibling elements\n    // https://react.dev/learn/rendering-lists#rules-of-keys\n    if (nodesLength > 1) {\n      props.key = index;\n    }\n\n    reactElements.push(\n      transform(createElement(node.name, props, children), node, index),\n    );\n  }\n\n  return reactElements.length === 1 ? reactElements[0] : reactElements;\n}\n\n/**\n * Determines whether DOM element attributes should be transformed to props.\n * Web Components should not have their attributes transformed except for `style`.\n *\n * @param node - Element node.\n * @returns - Whether the node attributes should be converted to props.\n */\nfunction skipAttributesToProps(node: Element): boolean {\n  return (\n    PRESERVE_CUSTOM_ATTRIBUTES &&\n    node.type === 'tag' &&\n    isCustomComponent(node.name, node.attribs)\n  );\n}\n","import htmlToDOM from 'html-dom-parser';\n\nimport attributesToProps from './attributes-to-props';\nimport domToReact from './dom-to-react';\nimport type { HTMLReactParserOptions } from './types';\n\nexport { Comment, Element, ProcessingInstruction, Text } from 'domhandler';\nexport type { DOMNode } from 'html-dom-parser';\n\nexport type { HTMLReactParserOptions };\nexport { attributesToProps, domToReact, htmlToDOM };\n\nconst domParserOptions = { lowerCaseAttributeNames: false } as const;\n\n/**\n * Converts HTML string to React elements.\n *\n * @param html - HTML string.\n * @param options - Parser options.\n * @returns - React element(s), empty array, or string.\n */\nexport default function HTMLReactParser(\n  html: string,\n  options?: HTMLReactParserOptions,\n): ReturnType<typeof domToReact> {\n  if (typeof html !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!html) {\n    return [];\n  }\n\n  return domToReact(\n    htmlToDOM(html, options?.htmlparser2 || domParserOptions),\n    options,\n  );\n}\n","import { version } from 'react';\nimport StyleToJS from 'style-to-js';\nimport type { Element } from 'html-dom-parser';\n\nimport type { Props } from './attributes-to-props';\n\nconst RESERVED_SVG_MATHML_ELEMENTS = new Set([\n  'annotation-xml',\n  'color-profile',\n  'font-face',\n  'font-face-src',\n  'font-face-uri',\n  'font-face-format',\n  'font-face-name',\n  'missing-glyph',\n] as const);\n\ntype ReservedSvgMathmlElements =\n  typeof RESERVED_SVG_MATHML_ELEMENTS extends Set<infer T> ? T : never;\n\n/**\n * Check if a tag is a custom component.\n *\n * @see {@link https://github.com/facebook/react/blob/v16.6.3/packages/react-dom/src/shared/isCustomComponent.js}\n *\n * @param tagName - Tag name.\n * @param props - Props passed to the element.\n * @returns - Whether the tag is custom component.\n */\nexport function isCustomComponent(\n  tagName: string,\n  props?: Record<PropertyKey, string>,\n): boolean {\n  if (!tagName.includes('-')) {\n    return Boolean(props && typeof props.is === 'string');\n  }\n\n  // These are reserved SVG and MathML elements.\n  // We don't mind this whitelist too much because we expect it to never grow.\n  // The alternative is to track the namespace in a few places which is convoluted.\n  // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n  if (RESERVED_SVG_MATHML_ELEMENTS.has(tagName as ReservedSvgMathmlElements)) {\n    return false;\n  }\n\n  return true;\n}\n\nconst styleOptions = {\n  reactCompat: true,\n} as const;\n\n/**\n * Sets style prop.\n *\n * @param style - Inline style.\n * @param props - Props object.\n */\nexport function setStyleProp(style: string, props: Props): void {\n  if (typeof style !== 'string') {\n    return;\n  }\n\n  if (!style.trim()) {\n    props.style = {};\n    return;\n  }\n\n  try {\n    props.style = StyleToJS(style, styleOptions);\n  } catch (error) {\n    props.style = {};\n  }\n}\n\n/**\n * @see https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html\n */\nexport const PRESERVE_CUSTOM_ATTRIBUTES = Number(version.split('.')[0]) >= 16;\n\n/**\n * @see https://github.com/facebook/react/blob/cae635054e17a6f107a39d328649137b83f25972/packages/react-dom/src/client/validateDOMNesting.js#L213\n */\nexport const ELEMENTS_WITH_NO_TEXT_CHILDREN = new Set([\n  'tr',\n  'tbody',\n  'thead',\n  'tfoot',\n  'colgroup',\n  'table',\n  'head',\n  'html',\n  'frameset',\n] as const);\n\ntype ElementsWithNoTextChildren =\n  typeof ELEMENTS_WITH_NO_TEXT_CHILDREN extends Set<infer T> ? T : never;\n\n/**\n * Checks if the given node can contain text nodes\n *\n * @param node - Element node.\n * @returns - Whether the node can contain text nodes.\n */\nexport const canTextBeChildOfNode = (node: Element) =>\n  !ELEMENTS_WITH_NO_TEXT_CHILDREN.has(node.name as ElementsWithNoTextChildren);\n\n/**\n * Returns the first argument as is.\n *\n * @param arg - The argument to be returned.\n * @returns - The input argument `arg`.\n */\nexport const returnFirstArg = (arg: any) => arg;\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 });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    function DomHandler(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new node_js_1.Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    DomHandler.prototype.onparserinit = function (parser) {\n        this.parser = parser;\n    };\n    // Resets the handler back to starting state\n    DomHandler.prototype.onreset = function () {\n        this.dom = [];\n        this.root = new node_js_1.Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    };\n    // Signals the handler that parsing is done\n    DomHandler.prototype.onend = function () {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    };\n    DomHandler.prototype.onerror = function (error) {\n        this.handleCallback(error);\n    };\n    DomHandler.prototype.onclosetag = function () {\n        this.lastNode = null;\n        var elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    };\n    DomHandler.prototype.onopentag = function (name, attribs) {\n        var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n        var element = new node_js_1.Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    };\n    DomHandler.prototype.ontext = function (data) {\n        var lastNode = this.lastNode;\n        if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n            lastNode.data += data;\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            var node = new node_js_1.Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    };\n    DomHandler.prototype.oncomment = function (data) {\n        if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        var node = new node_js_1.Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    };\n    DomHandler.prototype.oncommentend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.oncdatastart = function () {\n        var text = new node_js_1.Text(\"\");\n        var node = new node_js_1.CDATA([text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    };\n    DomHandler.prototype.oncdataend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.onprocessinginstruction = function (name, data) {\n        var node = new node_js_1.ProcessingInstruction(name, data);\n        this.addNode(node);\n    };\n    DomHandler.prototype.handleCallback = function (error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    };\n    DomHandler.prototype.addNode = function (node) {\n        var parent = this.tagStack[this.tagStack.length - 1];\n        var previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    };\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n    function Node() {\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    Object.defineProperty(Node.prototype, \"parentNode\", {\n        // Read-write aliases for properties\n        /**\n         * Same as {@link parent}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.parent;\n        },\n        set: function (parent) {\n            this.parent = parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"previousSibling\", {\n        /**\n         * Same as {@link prev}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.prev;\n        },\n        set: function (prev) {\n            this.prev = prev;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"nextSibling\", {\n        /**\n         * Same as {@link next}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.next;\n        },\n        set: function (next) {\n            this.next = next;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    Node.prototype.cloneNode = function (recursive) {\n        if (recursive === void 0) { recursive = false; }\n        return cloneNode(this, recursive);\n    };\n    return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n    __extends(DataNode, _super);\n    /**\n     * @param data The content of the data node\n     */\n    function DataNode(data) {\n        var _this = _super.call(this) || this;\n        _this.data = data;\n        return _this;\n    }\n    Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n        /**\n         * Same as {@link data}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.data;\n        },\n        set: function (data) {\n            this.data = data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Text;\n        return _this;\n    }\n    Object.defineProperty(Text.prototype, \"nodeType\", {\n        get: function () {\n            return 3;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Comment;\n        return _this;\n    }\n    Object.defineProperty(Comment.prototype, \"nodeType\", {\n        get: function () {\n            return 8;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n    __extends(ProcessingInstruction, _super);\n    function ProcessingInstruction(name, data) {\n        var _this = _super.call(this, data) || this;\n        _this.name = name;\n        _this.type = domelementtype_1.ElementType.Directive;\n        return _this;\n    }\n    Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n    __extends(NodeWithChildren, _super);\n    /**\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    function NodeWithChildren(children) {\n        var _this = _super.call(this) || this;\n        _this.children = children;\n        return _this;\n    }\n    Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n        // Aliases\n        /** First child of the node. */\n        get: function () {\n            var _a;\n            return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n        /** Last child of the node. */\n        get: function () {\n            return this.children.length > 0\n                ? this.children[this.children.length - 1]\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n        /**\n         * Same as {@link children}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.children;\n        },\n        set: function (children) {\n            this.children = children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n    __extends(CDATA, _super);\n    function CDATA() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.CDATA;\n        return _this;\n    }\n    Object.defineProperty(CDATA.prototype, \"nodeType\", {\n        get: function () {\n            return 4;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n    __extends(Document, _super);\n    function Document() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = domelementtype_1.ElementType.Root;\n        return _this;\n    }\n    Object.defineProperty(Document.prototype, \"nodeType\", {\n        get: function () {\n            return 9;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    function Element(name, attribs, children, type) {\n        if (children === void 0) { children = []; }\n        if (type === void 0) { type = name === \"script\"\n            ? domelementtype_1.ElementType.Script\n            : name === \"style\"\n                ? domelementtype_1.ElementType.Style\n                : domelementtype_1.ElementType.Tag; }\n        var _this = _super.call(this, children) || this;\n        _this.name = name;\n        _this.attribs = attribs;\n        _this.type = type;\n        return _this;\n    }\n    Object.defineProperty(Element.prototype, \"nodeType\", {\n        get: function () {\n            return 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"tagName\", {\n        // DOM Level 1 aliases\n        /**\n         * Same as {@link name}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.name;\n        },\n        set: function (name) {\n            this.name = name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"attributes\", {\n        get: function () {\n            var _this = this;\n            return Object.keys(this.attribs).map(function (name) {\n                var _a, _b;\n                return ({\n                    name: name,\n                    value: _this.attribs[name],\n                    namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                    prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n                });\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n    return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n    return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n    return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n    return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n    return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n    return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n    if (recursive === void 0) { recursive = false; }\n    var result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n        children.forEach(function (child) { return (child.parent = clone_1); });\n        if (node.namespace != null) {\n            clone_1.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n        }\n        result = clone_1;\n    }\n    else if (isCDATA(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_2 = new CDATA(children);\n        children.forEach(function (child) { return (child.parent = clone_2); });\n        result = clone_2;\n    }\n    else if (isDocument(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_3 = new Document(children);\n        children.forEach(function (child) { return (child.parent = clone_3); });\n        if (node[\"x-mode\"]) {\n            clone_3[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone_3;\n    }\n    else if (isDirective(node)) {\n        var instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(\"Not implemented yet: \".concat(node.type));\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n    var children = childs.map(function (child) { return cloneNode(child, true); });\n    for (var i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\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","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 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 root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\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 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","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","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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 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 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","/**\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 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","/**\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 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","/**\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","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 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","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 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","/** 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 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","/** 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","/**\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 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","/**\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","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var 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 match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var 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. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\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. */\n  var 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      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\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   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var 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  /** 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/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var 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  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var 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  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var 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\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\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   */\n  function 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\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` 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   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` 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   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` 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 {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(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 false;\n      }\n    }\n    return true;\n  }\n\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   */\n  function 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\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   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\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   */\n  function 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\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   */\n  function 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\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   */\n  function 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\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   */\n  function 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\n  /**\n   * A specialized version of `_.reduceRight` 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 last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\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   */\n  function 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\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\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   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\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   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\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   */\n  function 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\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   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\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   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\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   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` 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   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\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   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\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   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection 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 or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\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   */\n  function 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\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` 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   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\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   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\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   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\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   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\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   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\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   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\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   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\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   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\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   */\n  function 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\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   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\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   */\n  function 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\n  /**\n   * A specialized version of `_.lastIndexOf` 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   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\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   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\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   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\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   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\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   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\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     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\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     */\n    var 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\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\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     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function 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\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     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\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     */\n    function 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\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function 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    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\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     */\n    function 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\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     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\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     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\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     */\n    function 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\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\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     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\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     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\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     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\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     */\n    function 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\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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    /**\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     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\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     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\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     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\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     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\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     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\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     */\n    function 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\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\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     */\n    function 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\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\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     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` 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     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\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     */\n    function 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\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     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\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     */\n    var baseForRight = createBaseFor(true);\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     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` 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     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\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     */\n    function 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\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     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\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     */\n    function 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\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\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     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\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     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays 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 array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\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     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\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     */\n    function 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\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     */\n    function 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\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\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     */\n    function 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\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     */\n    function 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\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\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     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\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     */\n    function 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(getIteratee()));\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\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\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     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\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     */\n    var 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\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\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     */\n    function 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\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection 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     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * 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     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\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     */\n    function 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\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     */\n    function 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\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays 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 array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\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     */\n    function 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\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\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     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\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     */\n    function 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\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\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     */\n    function 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\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     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\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     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\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     */\n    function 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\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     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\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     */\n    function 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\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\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     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\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     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * 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     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\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     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\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     */\n    function 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\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     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\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     */\n    function 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\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     */\n    var 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\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\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     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((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\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\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     */\n    function 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\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\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     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\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     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\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     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\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     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\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     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\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     */\n    function 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\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     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\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     */\n    function 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\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\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     */\n    function 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\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\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     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\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     */\n    function 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\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\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     */\n    var 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\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     */\n    function 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\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     */\n    function 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\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\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 (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\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     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.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     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\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     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\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     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.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     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\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} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\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} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is 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} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\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} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\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} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\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} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\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} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\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} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\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     */\n    var 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\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\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     */\n    function 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`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\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     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\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     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\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     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\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     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\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 an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\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     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\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     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.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     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\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 an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\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     */\n    function 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\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\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     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\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     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\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     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\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 `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\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 native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\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 `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\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     */\n    function 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\n    /**\n     * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\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     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\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     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\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 weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\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 weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.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 `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\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     */\n    function 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\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     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is 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 convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\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     */\n    function 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\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     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\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     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\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     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\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     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\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     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\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     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` 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 of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\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     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\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     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\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     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\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 of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\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 values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values 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 values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\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     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\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     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\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éjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\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 kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower 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 lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower 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     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\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     */\n    function 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\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\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 snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\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 lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\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 upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, 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 upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\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     */\n    var upperFirst = createCaseFirst('toUpperCase');\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     */\n    function 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\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\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     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\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     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|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     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\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     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\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     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\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     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\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, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\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     */\n    function stubArray() {\n      return [];\n    }\n\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     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\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","'use strict';\n\nvar staticMatch = require('css-mediaquery').match;\nvar dynamicMatch = typeof window !== 'undefined' ? window.matchMedia : null;\n\n// our fake MediaQueryList\nfunction Mql(query, values, forceStatic){\n  var self = this;\n  var mql;\n\n  // matchMedia will return null in FF when it's called in a hidden iframe\n  // ref: https://stackoverflow.com/a/12330568\n  if(dynamicMatch && !forceStatic) mql = dynamicMatch.call(window, query);\n\n  if (mql) {\n    this.matches = mql.matches;\n    this.media = mql.media;\n    // TODO: is there a time it makes sense to remove this listener?\n    mql.addListener(update);\n  } else {\n    this.matches = staticMatch(query, values);\n    this.media = query;\n  }\n\n  this.addListener = addListener;\n  this.removeListener = removeListener;\n  this.dispose = dispose;\n\n  function addListener(listener){\n    if(mql){\n      mql.addListener(listener);\n    }\n  }\n\n  function removeListener(listener){\n    if(mql){\n      mql.removeListener(listener);\n    }\n  }\n\n  // update ourselves!\n  function update(evt){\n    self.matches = evt.matches;\n    self.media = evt.media;\n  }\n\n  function dispose(){\n    if(mql){\n      mql.removeListener(update);\n    }\n  }\n}\n\nfunction matchMedia(query, values, forceStatic){\n  return new Mql(query, values, forceStatic);\n}\n\nmodule.exports = matchMedia;\n","var Mexp=require('./postfix_evaluator.js');\r\nMexp.prototype.formulaEval = function () {\r\n\t\"use strict\";\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tfor(var i=0;i<arr.length;i++){\r\n\t\tif(arr[i].type===1||arr[i].type===3){\r\n\t\t\tdisp.push({value:arr[i].type===3?arr[i].show:arr[i].value,type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===13){\r\n\t\t\tdisp.push({value:arr[i].show,type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===0){\r\n\t\t\tdisp[disp.length-1]={value:arr[i].show+(arr[i].show!=\"-\"?\"(\":\"\")+disp[disp.length-1].value+(arr[i].show!=\"-\"?\")\":\"\"),type:0};\r\n\t\t}\r\n\t\telse if(arr[i].type===7){\r\n\t\t\tdisp[disp.length-1]={value:(disp[disp.length-1].type!=1?\"(\":\"\")+disp[disp.length-1].value+(disp[disp.length-1].type!=1?\")\":\"\")+arr[i].show,type:7};\r\n\t\t}\r\n\t\telse if(arr[i].type===10){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tif(arr[i].show==='P'||arr[i].show==='C')disp.push({value:\"<sup>\"+pop2.value+\"</sup>\"+arr[i].show+\"<sub>\"+pop1.value+\"</sub>\",type:10});\r\n\t\t\telse disp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+\"<sup>\"+pop1.value+\"</sup>\",type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tdisp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+arr[i].show+(pop1.type!=1?\"(\":\"\")+pop1.value+(pop1.type!=1?\")\":\"\"),type:arr[i].type});\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tpop3=disp.pop();\r\n\t\t\tdisp.push({value:arr[i].show+\"(\"+pop3.value+\",\"+pop2.value+\",\"+pop1.value+\")\",type:12});\r\n\t\t}\r\n\t}\r\n\treturn disp[0].value;\r\n};\r\nmodule.exports=Mexp;","'use strict'\r\nvar Mexp = require('./math_function.js')\r\nfunction inc(arr, val) {\r\n\tfor (var i = 0; i < arr.length; i++) {\r\n\t\tarr[i] += val\r\n\t}\r\n\treturn arr\r\n}\r\nvar tokens = [\r\n\t{ token: 'sin', show: 'sin', type: 0, value: Mexp.math.sin },\r\n\t{ token: 'cos', show: 'cos', type: 0, value: Mexp.math.cos },\r\n\t{ token: 'tan', show: 'tan', type: 0, value: Mexp.math.tan },\r\n\t{ token: 'pi', show: '&pi;', type: 3, value: 'PI' },\r\n\t{ token: '(', show: '(', type: 4, value: '(' },\r\n\t{ token: ')', show: ')', type: 5, value: ')' },\r\n\t{ token: 'P', show: 'P', type: 10, value: Mexp.math.P },\r\n\t{ token: 'C', show: 'C', type: 10, value: Mexp.math.C },\r\n\t{ token: ' ', show: ' ', type: 14, value: ' '.anchor },\r\n\t{ token: 'asin', show: 'asin', type: 0, value: Mexp.math.asin },\r\n\t{ token: 'acos', show: 'acos', type: 0, value: Mexp.math.acos },\r\n\t{ token: 'atan', show: 'atan', type: 0, value: Mexp.math.atan },\r\n\t{ token: '7', show: '7', type: 1, value: '7' },\r\n\t{ token: '8', show: '8', type: 1, value: '8' },\r\n\t{ token: '9', show: '9', type: 1, value: '9' },\r\n\t{ token: 'int', show: 'Int', type: 0, value: Math.floor },\r\n\t{ token: 'cosh', show: 'cosh', type: 0, value: Mexp.math.cosh },\r\n\t{ token: 'acosh', show: 'acosh', type: 0, value: Mexp.math.acosh },\r\n\t{ token: 'ln', show: ' ln', type: 0, value: Math.log },\r\n\t{ token: '^', show: '^', type: 10, value: Math.pow },\r\n\t{ token: 'root', show: 'root', type: 0, value: Math.sqrt },\r\n\t{ token: '4', show: '4', type: 1, value: '4' },\r\n\t{ token: '5', show: '5', type: 1, value: '5' },\r\n\t{ token: '6', show: '6', type: 1, value: '6' },\r\n\t{ token: '/', show: '&divide;', type: 2, value: Mexp.math.div },\r\n\t{ token: '!', show: '!', type: 7, value: Mexp.math.fact },\r\n\t{ token: 'tanh', show: 'tanh', type: 0, value: Mexp.math.tanh },\r\n\t{ token: 'atanh', show: 'atanh', type: 0, value: Mexp.math.atanh },\r\n\t{ token: 'Mod', show: ' Mod ', type: 2, value: Mexp.math.mod },\r\n\t{ token: '1', show: '1', type: 1, value: '1' },\r\n\t{ token: '2', show: '2', type: 1, value: '2' },\r\n\t{ token: '3', show: '3', type: 1, value: '3' },\r\n\t{ token: '*', show: '&times;', type: 2, value: Mexp.math.mul },\r\n\t{ token: 'sinh', show: 'sinh', type: 0, value: Mexp.math.sinh },\r\n\t{ token: 'asinh', show: 'asinh', type: 0, value: Mexp.math.asinh },\r\n\t{ token: 'e', show: 'e', type: 3, value: 'E' },\r\n\t{ token: 'log', show: ' log', type: 0, value: Mexp.math.log },\r\n\t{ token: '0', show: '0', type: 1, value: '0' },\r\n\t{ token: '.', show: '.', type: 6, value: '.' },\r\n\t{ token: '+', show: '+', type: 9, value: Mexp.math.add },\r\n\t{ token: '-', show: '-', type: 9, value: Mexp.math.sub },\r\n\t{ token: ',', show: ',', type: 11, value: ',' },\r\n\t{ token: 'Sigma', show: '&Sigma;', type: 12, value: Mexp.math.sigma },\r\n\t{ token: 'n', show: 'n', type: 13, value: 'n' },\r\n\t{ token: 'Pi', show: '&Pi;', type: 12, value: Mexp.math.Pi },\r\n\t{ token: 'pow', show: 'pow', type: 8, value: Math.pow, numberOfArguments: 2 },\r\n\t{ token: '&', show: '&', type: 9, value: Mexp.math.and },\r\n]\r\nvar preced = {\r\n\t0: 11,\r\n\t1: 0,\r\n\t2: 3,\r\n\t3: 0,\r\n\t4: 0,\r\n\t5: 0,\r\n\t6: 0,\r\n\t7: 11,\r\n\t8: 11,\r\n\t9: 1,\r\n\t10: 10,\r\n\t11: 0,\r\n\t12: 11,\r\n\t13: 0,\r\n\t14: -1,\r\n\t15: 11, // will be filtered after lexer\r\n} // stores precedence by types\r\nfor (var i = 0; i < tokens.length; i++) {\r\n\ttokens[i].precedence = preced[tokens[i].type]\r\n}\r\nvar type0 = {\r\n\t0: true,\r\n\t1: true,\r\n\t3: true,\r\n\t4: true,\r\n\t6: true,\r\n\t8: true,\r\n\t9: true,\r\n\t12: true,\r\n\t13: true,\r\n\t14: true,\r\n\t15: true,\r\n} // type2:true,type4:true,type9:true,type11:true,type21:true,type22\r\nvar type1 = {\r\n\t0: true,\r\n\t1: true,\r\n\t2: true,\r\n\t3: true,\r\n\t4: true,\r\n\t5: true,\r\n\t6: true,\r\n\t7: true,\r\n\t8: true,\r\n\t9: true,\r\n\t10: true,\r\n\t11: true,\r\n\t12: true,\r\n\t13: true,\r\n\t15: true,\r\n} // type3:true,type5:true,type7:true,type23\r\nvar type1Asterick = {\r\n\t0: true,\r\n\t3: true,\r\n\t4: true,\r\n\t8: true,\r\n\t12: true,\r\n\t13: true,\r\n\t15: true,\r\n}\r\nvar empty = {}\r\nvar type3Asterick = {\r\n\t0: true,\r\n\t1: true,\r\n\t3: true,\r\n\t4: true,\r\n\t6: true,\r\n\t8: true,\r\n\t12: true,\r\n\t13: true,\r\n\t15: true,\r\n} // type_5:true,type_7:true,type_23\r\nvar type6 = {\r\n\t1: true,\r\n}\r\nvar newAr = [\r\n\t[],\r\n\t[\r\n\t\t'1',\r\n\t\t'2',\r\n\t\t'3',\r\n\t\t'7',\r\n\t\t'8',\r\n\t\t'9',\r\n\t\t'4',\r\n\t\t'5',\r\n\t\t'6',\r\n\t\t'+',\r\n\t\t'-',\r\n\t\t'*',\r\n\t\t'/',\r\n\t\t'(',\r\n\t\t')',\r\n\t\t'^',\r\n\t\t'!',\r\n\t\t'P',\r\n\t\t'C',\r\n\t\t'e',\r\n\t\t'0',\r\n\t\t'.',\r\n\t\t',',\r\n\t\t'n',\r\n\t\t' ',\r\n\t\t'&',\r\n\t],\r\n\t['pi', 'ln', 'Pi'],\r\n\t['sin', 'cos', 'tan', 'Del', 'int', 'Mod', 'log', 'pow'],\r\n\t['asin', 'acos', 'atan', 'cosh', 'root', 'tanh', 'sinh'],\r\n\t['acosh', 'atanh', 'asinh', 'Sigma'],\r\n]\r\n\r\nfunction match(str1, str2, i, x) {\r\n\tfor (var f = 0; f < x; f++) {\r\n\t\tif (str1[i + f] !== str2[f]) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t}\r\n\treturn true\r\n}\r\nMexp.tokenTypes = {\r\n\tFUNCTION_WITH_ONE_ARG: 0,\r\n\tNUMBER: 1,\r\n\tBINARY_OPERATOR_HIGH_PRECENDENCE: 2,\r\n\tCONSTANT: 3,\r\n\tOPENING_PARENTHESIS: 4,\r\n\tCLOSING_PARENTHESIS: 5,\r\n\tDECIMAL: 6,\r\n\tPOSTFIX_FUNCTION_WITH_ONE_ARG: 7,\r\n\tFUNCTION_WITH_N_ARGS: 8,\r\n\tBINARY_OPERATOR_LOW_PRECENDENCE: 9,\r\n\tBINARY_OPERATOR_PERMUTATION: 10,\r\n\tCOMMA: 11,\r\n\tEVALUATED_FUNCTION: 12,\r\n\tEVALUATED_FUNCTION_PARAMETER: 13,\r\n\tSPACE: 14,\r\n}\r\n/**\r\n  \r\n  0 : function with syntax function_name(Maths_exp)\r\n  1 : numbers\r\n  2 : binary operators like * / Mod left associate and same precedence\r\n  3 : Math constant values like e,pi,Cruncher ans\r\n  4 : opening bracket\r\n  5 : closing bracket\r\n  6 : decimal\r\n  7 : function with syntax (Math_exp)function_name\r\n  8: function with syntax function_name(Math_exp1,Math_exp2)\r\n  9 : binary operator like +,-\r\n  10: binary operator like P C or ^\r\n  11: ,\r\n  12: function with , seperated three parameters and third parameter is a string that will be mexp string\r\n  13: variable of Sigma function\r\n */\r\nMexp.addToken = function (newTokens) {\r\n\tfor (var i = 0; i < newTokens.length; i++) {\r\n\t\tvar x = newTokens[i].token.length\r\n\t\tvar temp = -1\r\n\t\tif (newTokens[i].type === Mexp.tokenTypes.FUNCTION_WITH_N_ARGS && newTokens[i].numberOfArguments === undefined) {\r\n\t\t\tnewTokens[i].numberOfArguments = 2\r\n\t\t}\r\n\r\n\t\t// newAr is a specially designed data structure index of 1d array = length of tokens\r\n\t\tnewAr[x] = newAr[x] || []\r\n\t\tfor (var y = 0; y < newAr[x].length; y++) {\r\n\t\t\tif (newTokens[i].token === newAr[x][y]) {\r\n\t\t\t\ttemp = indexOfToken(newAr[x][y], tokens)\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (temp === -1) {\r\n\t\t\ttokens.push(newTokens[i])\r\n\t\t\tnewTokens[i].precedence = preced[newTokens[i].type]\r\n\t\t\tif (newAr.length <= newTokens[i].token.length) {\r\n\t\t\t\tnewAr[newTokens[i].token.length] = []\r\n\t\t\t}\r\n\t\t\tnewAr[newTokens[i].token.length].push(newTokens[i].token)\r\n\t\t} else {\r\n\t\t\t// overwrite\r\n\t\t\ttokens[temp] = newTokens[i]\r\n\t\t\tnewTokens[i].precedence = preced[newTokens[i].type]\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction indexOfToken(key, tokens) {\r\n\tfor (var search = 0; search < tokens.length; search++) {\r\n\t\tif (tokens[search].token === key) return search\r\n\t}\r\n\treturn -1\r\n}\r\nfunction tokenize(string) {\r\n\tvar nodes = []\r\n\tvar length = string.length\r\n\tvar key, x, y\r\n\tfor (var i = 0; i < length; i++) {\r\n\t\tif (i < length - 1 && string[i] === ' ' && string[i + 1] === ' ') {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tkey = ''\r\n\t\tfor (x = string.length - i > newAr.length - 2 ? newAr.length - 1 : string.length - i; x > 0; x--) {\r\n\t\t\tif (newAr[x] === undefined) continue\r\n\t\t\tfor (y = 0; y < newAr[x].length; y++) {\r\n\t\t\t\tif (match(string, newAr[x][y], i, x)) {\r\n\t\t\t\t\tkey = newAr[x][y]\r\n\t\t\t\t\ty = newAr[x].length\r\n\t\t\t\t\tx = 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\ti += key.length - 1\r\n\t\tif (key === '') {\r\n\t\t\tthrow new Mexp.Exception(\"Can't understand after \" + string.slice(i))\r\n\t\t}\r\n\t\tnodes.push(tokens[indexOfToken(key, tokens)])\r\n\t}\r\n\treturn nodes\r\n}\r\n\r\nvar changeSignObj = {\r\n\tvalue: Mexp.math.changeSign,\r\n\ttype: 0,\r\n\tpre: 21,\r\n\tshow: '-',\r\n}\r\nvar closingParObj = {\r\n\tvalue: ')',\r\n\tshow: ')',\r\n\ttype: 5,\r\n\tpre: 0,\r\n}\r\nvar openingParObj = {\r\n\tvalue: '(',\r\n\ttype: 4,\r\n\tpre: 0,\r\n\tshow: '(',\r\n}\r\nMexp.lex = function (inp, tokens) {\r\n\t'use strict'\r\n\r\n\tvar str = [openingParObj]\r\n\r\n\tvar ptc = [] // Parenthesis to close at the beginning is after one token\r\n\tvar inpStr = inp\r\n\tvar allowed = type0\r\n\tvar bracToClose = 0\r\n\tvar asterick = empty\r\n\tvar prevKey = ''\r\n\tvar i\r\n\tif (typeof tokens !== 'undefined') {\r\n\t\tMexp.addToken(tokens)\r\n\t}\r\n\tvar obj = {}\r\n\tvar nodes = tokenize(inpStr)\r\n\tfor (i = 0; i < nodes.length; i++) {\r\n\t\tvar node = nodes[i]\r\n\t\tif (node.type === 14) {\r\n\t\t\tif (\r\n\t\t\t\ti > 0 &&\r\n\t\t\t\ti < nodes.length - 1 &&\r\n\t\t\t\tnodes[i + 1].type === 1 &&\r\n\t\t\t\t(nodes[i - 1].type === 1 || nodes[i - 1].type === 6)\r\n\t\t\t) {\r\n\t\t\t\tthrow new Mexp.Exception('Unexpected Space')\r\n\t\t\t}\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tvar cToken = node.token\r\n\t\tvar cType = node.type\r\n\t\tvar cEv = node.value\r\n\t\tvar cPre = node.precedence\r\n\t\tvar cShow = node.show\r\n\t\tvar pre = str[str.length - 1]\r\n\t\tvar j\r\n\t\tfor (j = ptc.length; j--; ) {\r\n\t\t\t// loop over ptc\r\n\t\t\tif (ptc[j] === 0) {\r\n\t\t\t\tif ([0, 2, 3, 4, 5, 9, 11, 12, 13].indexOf(cType) !== -1) {\r\n\t\t\t\t\tif (allowed[cType] !== true) {\r\n\t\t\t\t\t\tthrow new Mexp.Exception(cToken + ' is not allowed after ' + prevKey)\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstr.push(closingParObj)\r\n\t\t\t\t\tallowed = type1\r\n\t\t\t\t\tasterick = type3Asterick\r\n\t\t\t\t\tptc.pop()\r\n\t\t\t\t}\r\n\t\t\t} else break\r\n\t\t}\r\n\t\tif (allowed[cType] !== true) {\r\n\t\t\tthrow new Mexp.Exception(cToken + ' is not allowed after ' + prevKey)\r\n\t\t}\r\n\t\tif (asterick[cType] === true) {\r\n\t\t\tcType = 2\r\n\t\t\tcEv = Mexp.math.mul\r\n\t\t\tcShow = '&times;'\r\n\t\t\tcPre = 3\r\n\t\t\ti = i - 1\r\n\t\t}\r\n\t\tobj = {\r\n\t\t\tvalue: cEv,\r\n\t\t\ttype: cType,\r\n\t\t\tpre: cPre,\r\n\t\t\tshow: cShow,\r\n\t\t\tnumberOfArguments: node.numberOfArguments,\r\n\t\t}\r\n\t\tif (cType === 0) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tinc(ptc, 2)\r\n\t\t\tstr.push(obj)\r\n\t\t\tif (nodes[i + 1].type !== 4) {\r\n\t\t\t\tstr.push(openingParObj)\r\n\t\t\t\tptc.push(2)\r\n\t\t\t}\r\n\t\t\t// bracToClose++\r\n\t\t} else if (cType === 1) {\r\n\t\t\tif (pre.type === 1) {\r\n\t\t\t\tpre.value += cEv\r\n\t\t\t\tinc(ptc, 1)\r\n\t\t\t} else {\r\n\t\t\t\tstr.push(obj)\r\n\t\t\t}\r\n\t\t\tallowed = type1\r\n\t\t\tasterick = type1Asterick\r\n\t\t} else if (cType === 2) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tinc(ptc, 2)\r\n\t\t\tstr.push(obj)\r\n\t\t} else if (cType === 3) {\r\n\t\t\t// constant\r\n\t\t\tstr.push(obj)\r\n\t\t\tallowed = type1\r\n\t\t\tasterick = type3Asterick\r\n\t\t} else if (cType === 4) {\r\n\t\t\tinc(ptc, 1)\r\n\t\t\tbracToClose++\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tstr.push(obj)\r\n\t\t} else if (cType === 5) {\r\n\t\t\tif (!bracToClose) {\r\n\t\t\t\tthrow new Mexp.Exception('Closing parenthesis are more than opening one, wait What!!!')\r\n\t\t\t}\r\n\t\t\tbracToClose--\r\n\t\t\tallowed = type1\r\n\t\t\tasterick = type3Asterick\r\n\t\t\tstr.push(obj)\r\n\t\t\tinc(ptc, 1)\r\n\t\t} else if (cType === 6) {\r\n\t\t\tif (pre.hasDec) {\r\n\t\t\t\tthrow new Mexp.Exception('Two decimals are not allowed in one number')\r\n\t\t\t}\r\n\t\t\tif (pre.type !== 1) {\r\n\t\t\t\tpre = {\r\n\t\t\t\t\tvalue: 0,\r\n\t\t\t\t\ttype: 1,\r\n\t\t\t\t\tpre: 0,\r\n\t\t\t\t} // pre needs to be changed as it will the last value now to be safe in later code\r\n\t\t\t\tstr.push(pre)\r\n\t\t\t\t// inc(ptc, 1)\r\n\t\t\t}\r\n\t\t\tallowed = type6\r\n\t\t\tinc(ptc, 1)\r\n\t\t\tasterick = empty\r\n\t\t\tpre.value += cEv\r\n\t\t\tpre.hasDec = true\r\n\t\t} else if (cType === 7) {\r\n\t\t\tallowed = type1\r\n\t\t\tasterick = type3Asterick\r\n\t\t\tinc(ptc, 1)\r\n\t\t\tstr.push(obj)\r\n\t\t}\r\n\t\tif (cType === 8) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tinc(ptc, node.numberOfArguments + 2)\r\n\t\t\tstr.push(obj)\r\n\t\t\t// str.push(openingParObj)\r\n\t\t\tif (nodes[i + 1].type !== 4) {\r\n\t\t\t\tstr.push(openingParObj)\r\n\t\t\t\tptc.push(node.numberOfArguments + 2)\r\n\t\t\t}\r\n\t\t} else if (cType === 9) {\r\n\t\t\tif (pre.type === 9) {\r\n\t\t\t\tif (pre.value === Mexp.math.add) {\r\n\t\t\t\t\tpre.value = cEv\r\n\t\t\t\t\tpre.show = cShow\r\n\t\t\t\t\tinc(ptc, 1)\r\n\t\t\t\t} else if (pre.value === Mexp.math.sub && cShow === '-') {\r\n\t\t\t\t\tpre.value = Mexp.math.add\r\n\t\t\t\t\tpre.show = '+'\r\n\t\t\t\t\tinc(ptc, 1)\r\n\t\t\t\t}\r\n\t\t\t} else if (pre.type !== 5 && pre.type !== 7 && pre.type !== 1 && pre.type !== 3 && pre.type !== 13) {\r\n\t\t\t\t// changesign only when negative is found\r\n\t\t\t\tif (cToken === '-') {\r\n\t\t\t\t\t// do nothing for + token\r\n\t\t\t\t\t// don't add with the above if statement as that will run the else statement of parent if on Ctoken +\r\n\t\t\t\t\tallowed = type0\r\n\t\t\t\t\tasterick = empty\r\n\t\t\t\t\tinc(ptc, 2).push(2)\r\n\t\t\t\t\tstr.push(changeSignObj)\r\n\t\t\t\t\tstr.push(openingParObj)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstr.push(obj)\r\n\t\t\t\tinc(ptc, 2)\r\n\t\t\t}\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t} else if (cType === 10) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tinc(ptc, 2)\r\n\t\t\tstr.push(obj)\r\n\t\t} else if (cType === 11) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tstr.push(obj)\r\n\t\t} else if (cType === 12) {\r\n\t\t\tallowed = type0\r\n\t\t\tasterick = empty\r\n\t\t\tinc(ptc, 6)\r\n\t\t\tstr.push(obj)\r\n\t\t\tif (nodes[i + 1].type !== 4) {\r\n\t\t\t\tstr.push(openingParObj)\r\n\t\t\t\tptc.push(6)\r\n\t\t\t}\r\n\t\t} else if (cType === 13) {\r\n\t\t\tallowed = type1\r\n\t\t\tasterick = type3Asterick\r\n\t\t\tstr.push(obj)\r\n\t\t}\r\n\r\n\t\tinc(ptc, -1)\r\n\t\tprevKey = cToken\r\n\t}\r\n\tfor (j = ptc.length; j--; ) {\r\n\t\t// loop over ptc\r\n\t\tstr.push(closingParObj)\r\n\t}\r\n\tif (allowed[5] !== true) {\r\n\t\tthrow new Mexp.Exception('complete the expression')\r\n\t}\r\n\twhile (bracToClose--) {\r\n\t\tstr.push(closingParObj)\r\n\t}\r\n\r\n\tstr.push(closingParObj)\r\n\t//        console.log(str);\r\n\treturn new Mexp(str)\r\n}\r\nmodule.exports = Mexp\r\n","\"use strict\";\r\nvar Mexp = function (parsed) {\r\n  this.value = parsed\r\n}\r\n\r\nMexp.math = {\r\n  isDegree: true, // mode of calculator\r\n  acos: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.acos(x) : Math.acos(x))\r\n  },\r\n  add: function (a, b) {\r\n    return a + b\r\n  },\r\n  asin: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.asin(x) : Math.asin(x))\r\n  },\r\n  atan: function (x) {\r\n    return (Mexp.math.isDegree ? 180 / Math.PI * Math.atan(x) : Math.atan(x))\r\n  },\r\n  acosh: function (x) {\r\n    return Math.log(x + Math.sqrt(x * x - 1))\r\n  },\r\n  asinh: function (x) {\r\n    return Math.log(x + Math.sqrt(x * x + 1))\r\n  },\r\n  atanh: function (x) {\r\n    return Math.log((1 + x) / (1 - x))\r\n  },\r\n  C: function (n, r) {\r\n    var pro = 1\r\n    var other = n - r\r\n    var choice = r\r\n    if (choice < other) {\r\n      choice = other\r\n      other = r\r\n    }\r\n    for (var i = choice + 1; i <= n; i++) {\r\n      pro *= i\r\n    }\r\n    return pro / Mexp.math.fact(other)\r\n  },\r\n  changeSign: function (x) {\r\n    return -x\r\n  },\r\n  cos: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.cos(x)\r\n  },\r\n  cosh: function (x) {\r\n    return (Math.pow(Math.E, x) + Math.pow(Math.E, -1 * x)) / 2\r\n  },\r\n  div: function (a, b) {\r\n    return a / b\r\n  },\r\n  fact: function (n) {\r\n    if (n % 1 !== 0) return 'NaN'\r\n    var pro = 1\r\n    for (var i = 2; i <= n; i++) {\r\n      pro *= i\r\n    }\r\n    return pro\r\n  },\r\n  inverse: function (x) {\r\n    return 1 / x\r\n  },\r\n  log: function (i) {\r\n    return Math.log(i) / Math.log(10)\r\n  },\r\n  mod: function (a, b) {\r\n    return a % b\r\n  },\r\n  mul: function (a, b) {\r\n    return a * b\r\n  },\r\n  P: function (n, r) {\r\n    var pro = 1\r\n    for (var i = Math.floor(n) - Math.floor(r) + 1; i <= Math.floor(n); i++) {\r\n      pro *= i\r\n    }\r\n    return pro\r\n  },\r\n  Pi: function (low, high, ex) {\r\n    var pro = 1\r\n    for (var i = low; i <= high; i++) {\r\n      pro *= Number(ex.postfixEval({\r\n        n: i\r\n      }))\r\n    }\r\n    return pro\r\n  },\r\n  pow10x: function (e) {\r\n    var x = 1\r\n    while (e--) {\r\n      x *= 10\r\n    }\r\n    return x\r\n  },\r\n  sigma: function (low, high, ex) {\r\n    var sum = 0\r\n    for (var i = low; i <= high; i++) {\r\n      sum += Number(ex.postfixEval({\r\n        n: i\r\n      }))\r\n    }\r\n    return sum\r\n  },\r\n  sin: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.sin(x)\r\n  },\r\n  sinh: function (x) {\r\n    return (Math.pow(Math.E, x) - Math.pow(Math.E, -1 * x)) / 2\r\n  },\r\n  sub: function (a, b) {\r\n    return a - b\r\n  },\r\n  tan: function (x) {\r\n    if (Mexp.math.isDegree) x = Mexp.math.toRadian(x)\r\n    return Math.tan(x)\r\n  },\r\n  tanh: function (x) {\r\n    return Mexp.sinha(x) / Mexp.cosha(x)\r\n  },\r\n  toRadian: function (x) {\r\n    return x * Math.PI / 180\r\n  },\r\n  and: function (a, b) {\r\n    return a & b\r\n  }\r\n}\r\nMexp.Exception = function (message) {\r\n  this.message = message\r\n}\r\nmodule.exports = Mexp\r\n","\r\nvar Mexp = require('./lexer.js');\r\n\r\nMexp.prototype.toPostfix = function () {\r\n\t'use strict';\r\n\tvar post = [], elem, popped, prep, pre, ele;\r\n\tvar stack = [{ value: \"(\", type: 4, pre: 0 }];\r\n\tvar arr = this.value;\r\n\tfor (var i = 1; i < arr.length; i++) {\r\n\t\tif (arr[i].type === 1 || arr[i].type === 3 || arr[i].type === 13) {\t//if token is number,constant,or n(which is also a special constant in our case)\r\n\t\t\tif (arr[i].type === 1)\r\n\t\t\t\tarr[i].value = Number(arr[i].value);\r\n\t\t\tpost.push(arr[i]);\r\n\t\t}\r\n\t\telse if (arr[i].type === 4) {\r\n\t\t\tstack.push(arr[i]);\r\n\t\t}\r\n\t\telse if (arr[i].type === 5) {\r\n\t\t\twhile ((popped = stack.pop()).type !== 4) {\r\n\t\t\t\tpost.push(popped);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (arr[i].type === 11) {\r\n\t\t\twhile ((popped = stack.pop()).type !== 4) {\r\n\t\t\t\tpost.push(popped);\r\n\t\t\t}\r\n\t\t\tstack.push(popped);\r\n\t\t}\r\n\t\telse {\r\n\t\t\telem = arr[i];\r\n\t\t\tpre = elem.pre;\r\n\t\t\tele = stack[stack.length - 1];\r\n\t\t\tprep = ele.pre;\r\n\t\t\tvar flag = ele.value == 'Math.pow' && elem.value == 'Math.pow';\r\n\t\t\tif (pre > prep) stack.push(elem);\r\n\t\t\telse {\r\n\t\t\t\twhile (prep >= pre && !flag || flag && pre < prep) {\r\n\t\t\t\t\tpopped = stack.pop();\r\n\t\t\t\t\tele = stack[stack.length - 1];\r\n\t\t\t\t\tpost.push(popped);\r\n\t\t\t\t\tprep = ele.pre;\r\n\t\t\t\t\tflag = elem.value == 'Math.pow' && ele.value == 'Math.pow';\r\n\t\t\t\t}\r\n\t\t\t\tstack.push(elem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn new Mexp(post);\r\n};\r\nmodule.exports = Mexp;","var Mexp = require('./postfix.js')\r\nMexp.prototype.postfixEval = function (UserDefined) {\r\n\t'use strict'\r\n\tUserDefined = UserDefined || {}\r\n\tUserDefined.PI = Math.PI\r\n\tUserDefined.E = Math.E\r\n\tvar stack = [],\r\n\t\tpop1,\r\n\t\tpop2,\r\n\t\tpop3\r\n\tvar disp = []\r\n\tvar temp = ''\r\n\tvar arr = this.value\r\n\tvar bool = typeof UserDefined.n !== 'undefined'\r\n\tfor (var i = 0; i < arr.length; i++) {\r\n\t\tif (arr[i].type === 1) {\r\n\t\t\tstack.push({ value: arr[i].value, type: 1 })\r\n\t\t} else if (arr[i].type === 3) {\r\n\t\t\tstack.push({ value: UserDefined[arr[i].value], type: 1 })\r\n\t\t} else if (arr[i].type === 0) {\r\n\t\t\tif (typeof stack[stack.length - 1].type === 'undefined') {\r\n\t\t\t\tstack[stack.length - 1].value.push(arr[i])\r\n\t\t\t} else stack[stack.length - 1].value = arr[i].value(stack[stack.length - 1].value)\r\n\t\t} else if (arr[i].type === 7) {\r\n\t\t\tif (typeof stack[stack.length - 1].type === 'undefined') {\r\n\t\t\t\tstack[stack.length - 1].value.push(arr[i])\r\n\t\t\t} else stack[stack.length - 1].value = arr[i].value(stack[stack.length - 1].value)\r\n\t\t} else if (arr[i].type === 8) {\r\n\t\t\tvar popped = []\r\n\t\t\tfor (var x = 0; x < arr[i].numberOfArguments; x++) {\r\n\t\t\t\tpopped.push(stack.pop().value)\r\n\t\t\t}\r\n\t\t\tstack.push({ type: 1, value: arr[i].value.apply(arr[i], popped.reverse()) })\r\n\t\t} else if (arr[i].type === 10) {\r\n\t\t\tpop1 = stack.pop()\r\n\t\t\tpop2 = stack.pop()\r\n\t\t\tif (typeof pop2.type === 'undefined') {\r\n\t\t\t\tpop2.value = pop2.concat(pop1)\r\n\t\t\t\tpop2.value.push(arr[i])\r\n\t\t\t\tstack.push(pop2)\r\n\t\t\t} else if (typeof pop1.type === 'undefined') {\r\n\t\t\t\tpop1.unshift(pop2)\r\n\t\t\t\tpop1.push(arr[i])\r\n\t\t\t\tstack.push(pop1)\r\n\t\t\t} else {\r\n\t\t\t\tstack.push({ type: 1, value: arr[i].value(pop2.value, pop1.value) })\r\n\t\t\t}\r\n\t\t} else if (arr[i].type === 2 || arr[i].type === 9) {\r\n\t\t\tpop1 = stack.pop()\r\n\t\t\tpop2 = stack.pop()\r\n\t\t\tif (typeof pop2.type === 'undefined') {\r\n\t\t\t\tpop2 = pop2.concat(pop1)\r\n\t\t\t\tpop2.push(arr[i])\r\n\t\t\t\tstack.push(pop2)\r\n\t\t\t} else if (typeof pop1.type === 'undefined') {\r\n\t\t\t\tpop1.unshift(pop2)\r\n\t\t\t\tpop1.push(arr[i])\r\n\t\t\t\tstack.push(pop1)\r\n\t\t\t} else {\r\n\t\t\t\tstack.push({ type: 1, value: arr[i].value(pop2.value, pop1.value) })\r\n\t\t\t}\r\n\t\t} else if (arr[i].type === 12) {\r\n\t\t\tpop1 = stack.pop()\r\n\t\t\tif (typeof pop1.type !== 'undefined') {\r\n\t\t\t\tpop1 = [pop1]\r\n\t\t\t}\r\n\t\t\tpop2 = stack.pop()\r\n\t\t\tpop3 = stack.pop()\r\n\t\t\tstack.push({ type: 1, value: arr[i].value(pop3.value, pop2.value, new Mexp(pop1)) })\r\n\t\t} else if (arr[i].type === 13) {\r\n\t\t\tif (bool) {\r\n\t\t\t\tstack.push({ value: UserDefined[arr[i].value], type: 3 })\r\n\t\t\t} else stack.push([arr[i]])\r\n\t\t}\r\n\t}\r\n\tif (stack.length > 1) {\r\n\t\tthrow new Mexp.Exception('Uncaught Syntax error')\r\n\t}\r\n\treturn stack[0].value > 1000000000000000 ? 'Infinity' : parseFloat(stack[0].value.toFixed(15))\r\n}\r\nMexp.eval = function (str, tokens, obj) {\r\n\tif (typeof tokens === 'undefined') {\r\n\t\treturn this.lex(str).toPostfix().postfixEval()\r\n\t} else if (typeof obj === 'undefined') {\r\n\t\tif (typeof tokens.length !== 'undefined') return this.lex(str, tokens).toPostfix().postfixEval()\r\n\t\telse return this.lex(str).toPostfix().postfixEval(tokens)\r\n\t} else return this.lex(str, tokens).toPostfix().postfixEval(obj)\r\n}\r\nmodule.exports = Mexp\r\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n\n\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nconst RESERVED = 0;\n\n// A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\nconst STRING = 1;\n\n// A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\nconst BOOLEANISH_STRING = 2;\n\n// A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\nconst BOOLEAN = 3;\n\n// An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\nconst OVERLOADED_BOOLEAN = 4;\n\n// An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\nconst NUMERIC = 5;\n\n// An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\nconst POSITIVE_NUMERIC = 6;\n\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(\n  name,\n  type,\n  mustUseProperty,\n  attributeName,\n  attributeNamespace,\n  sanitizeURL,\n  removeEmptyString,\n) {\n  this.acceptsBooleans =\n    type === BOOLEANISH_STRING ||\n    type === BOOLEAN ||\n    type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n}\n\n// When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\nconst properties = {};\n\n// These props are reserved by React. They shouldn't be written to the DOM.\nconst reservedProps = [\n  'children',\n  'dangerouslySetInnerHTML',\n  // TODO: This prevents the assignment of defaultValue to regular\n  // elements (not just inputs). Now that ReactDOMInput assigns to the\n  // defaultValue property -- do we need this?\n  'defaultValue',\n  'defaultChecked',\n  'innerHTML',\n  'suppressContentEditableWarning',\n  'suppressHydrationWarning',\n  'style',\n];\n\nreservedProps.forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    RESERVED,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n[\n  ['acceptCharset', 'accept-charset'],\n  ['className', 'class'],\n  ['htmlFor', 'for'],\n  ['httpEquiv', 'http-equiv'],\n].forEach(([name, attributeName]) => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEANISH_STRING,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n[\n  'autoReverse',\n  'externalResourcesRequired',\n  'focusable',\n  'preserveAlpha',\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEANISH_STRING,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML boolean attributes.\n[\n  'allowFullScreen',\n  'async',\n  // Note: there is a special case that prevents it from being written to the DOM\n  // on the client side because the browsers are inconsistent. Instead we call focus().\n  'autoFocus',\n  'autoPlay',\n  'controls',\n  'default',\n  'defer',\n  'disabled',\n  'disablePictureInPicture',\n  'disableRemotePlayback',\n  'formNoValidate',\n  'hidden',\n  'loop',\n  'noModule',\n  'noValidate',\n  'open',\n  'playsInline',\n  'readOnly',\n  'required',\n  'reversed',\n  'scoped',\n  'seamless',\n  // Microdata\n  'itemScope',\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEAN,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n[\n  'checked',\n  // Note: `option.selected` is not updated if `select.multiple` is\n  // disabled with `removeAttribute`. We have special logic for handling this.\n  'multiple',\n  'muted',\n  'selected',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    BOOLEAN,\n    true, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n[\n  'capture',\n  'download',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    OVERLOADED_BOOLEAN,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that must be positive numbers.\n[\n  'cols',\n  'rows',\n  'size',\n  'span',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    POSITIVE_NUMERIC,\n    false, // mustUseProperty\n    name, // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These are HTML attributes that must be numbers.\n['rowSpan', 'start'].forEach(name => {\n  properties[name] = new PropertyInfoRecord(\n    name,\n    NUMERIC,\n    false, // mustUseProperty\n    name.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\nconst CAMELIZE = /[\\-\\:]([a-z])/g;\nconst capitalize = token => token[1].toUpperCase();\n\n// This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n[\n  'accent-height',\n  'alignment-baseline',\n  'arabic-form',\n  'baseline-shift',\n  'cap-height',\n  'clip-path',\n  'clip-rule',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'dominant-baseline',\n  'enable-background',\n  'fill-opacity',\n  'fill-rule',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'glyph-name',\n  'glyph-orientation-horizontal',\n  'glyph-orientation-vertical',\n  'horiz-adv-x',\n  'horiz-origin-x',\n  'image-rendering',\n  'letter-spacing',\n  'lighting-color',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'overline-position',\n  'overline-thickness',\n  'paint-order',\n  'panose-1',\n  'pointer-events',\n  'rendering-intent',\n  'shape-rendering',\n  'stop-color',\n  'stop-opacity',\n  'strikethrough-position',\n  'strikethrough-thickness',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke-width',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'underline-position',\n  'underline-thickness',\n  'unicode-bidi',\n  'unicode-range',\n  'units-per-em',\n  'v-alphabetic',\n  'v-hanging',\n  'v-ideographic',\n  'v-mathematical',\n  'vector-effect',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'word-spacing',\n  'writing-mode',\n  'xmlns:xlink',\n  'x-height',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// String SVG attributes with the xlink namespace.\n[\n  'xlink:actuate',\n  'xlink:arcrole',\n  'xlink:role',\n  'xlink:show',\n  'xlink:title',\n  'xlink:type',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    'http://www.w3.org/1999/xlink',\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// String SVG attributes with the xml namespace.\n[\n  'xml:base',\n  'xml:lang',\n  'xml:space',\n\n  // NOTE: if you add a camelCased prop to this list,\n  // you'll need to set attributeName to name.toLowerCase()\n  // instead in the assignment below.\n].forEach(attributeName => {\n  const name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(\n    name,\n    STRING,\n    false, // mustUseProperty\n    attributeName,\n    'http://www.w3.org/XML/1998/namespace',\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n['tabIndex', 'crossOrigin'].forEach(attributeName => {\n  properties[attributeName] = new PropertyInfoRecord(\n    attributeName,\n    STRING,\n    false, // mustUseProperty\n    attributeName.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    false, // sanitizeURL\n    false, // removeEmptyString\n  );\n});\n\n// These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\nconst xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord(\n  'xlinkHref',\n  STRING,\n  false, // mustUseProperty\n  'xlink:href',\n  'http://www.w3.org/1999/xlink',\n  true, // sanitizeURL\n  false, // removeEmptyString\n);\n\n['src', 'href', 'action', 'formAction'].forEach(attributeName => {\n  properties[attributeName] = new PropertyInfoRecord(\n    attributeName,\n    STRING,\n    false, // mustUseProperty\n    attributeName.toLowerCase(), // attributeName\n    null, // attributeNamespace\n    true, // sanitizeURL\n    true, // removeEmptyString\n  );\n});\n\n// \nconst {\n  CAMELCASE,\n  SAME,\n  possibleStandardNames: possibleStandardNamesOptimized\n} = require('../lib/possibleStandardNamesOptimized');\n\nconst ATTRIBUTE_NAME_START_CHAR =\n  ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n\nconst ATTRIBUTE_NAME_CHAR =\n  ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\n\n/**\n * Checks whether a property name is a custom attribute.\n *\n * @see https://github.com/facebook/react/blob/15-stable/src/renderers/dom/shared/HTMLDOMPropertyConfig.js#L23-L25\n *\n * @type {(attribute: string) => boolean}\n */\nconst isCustomAttribute =\n  RegExp.prototype.test.bind(\n    // eslint-disable-next-line no-misleading-character-class\n    new RegExp('^(data|aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$')\n  );\n\n/**\n * @type {Record<string, string>}\n */\nconst possibleStandardNames = Object.keys(\n  possibleStandardNamesOptimized\n).reduce((accumulator, standardName) => {\n  const propName = possibleStandardNamesOptimized[standardName];\n  if (propName === SAME) {\n    accumulator[standardName] = standardName;\n  } else if (propName === CAMELCASE) {\n    accumulator[standardName.toLowerCase()] = standardName;\n  } else {\n    accumulator[standardName] = propName;\n  }\n  return accumulator;\n}, {});\n\nexports.BOOLEAN = BOOLEAN;\nexports.BOOLEANISH_STRING = BOOLEANISH_STRING;\nexports.NUMERIC = NUMERIC;\nexports.OVERLOADED_BOOLEAN = OVERLOADED_BOOLEAN;\nexports.POSITIVE_NUMERIC = POSITIVE_NUMERIC;\nexports.RESERVED = RESERVED;\nexports.STRING = STRING;\nexports.getPropertyInfo = getPropertyInfo;\nexports.isCustomAttribute = isCustomAttribute;\nexports.possibleStandardNames = possibleStandardNames;\n","// An attribute in which the DOM/SVG standard name is the same as the React prop name (e.g., 'accept').\nvar SAME = 0;\nexports.SAME = SAME;\n\n// An attribute in which the React prop name is the camelcased version of the DOM/SVG standard name (e.g., 'acceptCharset').\nvar CAMELCASE = 1;\nexports.CAMELCASE = CAMELCASE;\n\nexports.possibleStandardNames = {\n  accept: 0,\n  acceptCharset: 1,\n  'accept-charset': 'acceptCharset',\n  accessKey: 1,\n  action: 0,\n  allowFullScreen: 1,\n  alt: 0,\n  as: 0,\n  async: 0,\n  autoCapitalize: 1,\n  autoComplete: 1,\n  autoCorrect: 1,\n  autoFocus: 1,\n  autoPlay: 1,\n  autoSave: 1,\n  capture: 0,\n  cellPadding: 1,\n  cellSpacing: 1,\n  challenge: 0,\n  charSet: 1,\n  checked: 0,\n  children: 0,\n  cite: 0,\n  class: 'className',\n  classID: 1,\n  className: 1,\n  cols: 0,\n  colSpan: 1,\n  content: 0,\n  contentEditable: 1,\n  contextMenu: 1,\n  controls: 0,\n  controlsList: 1,\n  coords: 0,\n  crossOrigin: 1,\n  dangerouslySetInnerHTML: 1,\n  data: 0,\n  dateTime: 1,\n  default: 0,\n  defaultChecked: 1,\n  defaultValue: 1,\n  defer: 0,\n  dir: 0,\n  disabled: 0,\n  disablePictureInPicture: 1,\n  disableRemotePlayback: 1,\n  download: 0,\n  draggable: 0,\n  encType: 1,\n  enterKeyHint: 1,\n  for: 'htmlFor',\n  form: 0,\n  formMethod: 1,\n  formAction: 1,\n  formEncType: 1,\n  formNoValidate: 1,\n  formTarget: 1,\n  frameBorder: 1,\n  headers: 0,\n  height: 0,\n  hidden: 0,\n  high: 0,\n  href: 0,\n  hrefLang: 1,\n  htmlFor: 1,\n  httpEquiv: 1,\n  'http-equiv': 'httpEquiv',\n  icon: 0,\n  id: 0,\n  innerHTML: 1,\n  inputMode: 1,\n  integrity: 0,\n  is: 0,\n  itemID: 1,\n  itemProp: 1,\n  itemRef: 1,\n  itemScope: 1,\n  itemType: 1,\n  keyParams: 1,\n  keyType: 1,\n  kind: 0,\n  label: 0,\n  lang: 0,\n  list: 0,\n  loop: 0,\n  low: 0,\n  manifest: 0,\n  marginWidth: 1,\n  marginHeight: 1,\n  max: 0,\n  maxLength: 1,\n  media: 0,\n  mediaGroup: 1,\n  method: 0,\n  min: 0,\n  minLength: 1,\n  multiple: 0,\n  muted: 0,\n  name: 0,\n  noModule: 1,\n  nonce: 0,\n  noValidate: 1,\n  open: 0,\n  optimum: 0,\n  pattern: 0,\n  placeholder: 0,\n  playsInline: 1,\n  poster: 0,\n  preload: 0,\n  profile: 0,\n  radioGroup: 1,\n  readOnly: 1,\n  referrerPolicy: 1,\n  rel: 0,\n  required: 0,\n  reversed: 0,\n  role: 0,\n  rows: 0,\n  rowSpan: 1,\n  sandbox: 0,\n  scope: 0,\n  scoped: 0,\n  scrolling: 0,\n  seamless: 0,\n  selected: 0,\n  shape: 0,\n  size: 0,\n  sizes: 0,\n  span: 0,\n  spellCheck: 1,\n  src: 0,\n  srcDoc: 1,\n  srcLang: 1,\n  srcSet: 1,\n  start: 0,\n  step: 0,\n  style: 0,\n  summary: 0,\n  tabIndex: 1,\n  target: 0,\n  title: 0,\n  type: 0,\n  useMap: 1,\n  value: 0,\n  width: 0,\n  wmode: 0,\n  wrap: 0,\n  about: 0,\n  accentHeight: 1,\n  'accent-height': 'accentHeight',\n  accumulate: 0,\n  additive: 0,\n  alignmentBaseline: 1,\n  'alignment-baseline': 'alignmentBaseline',\n  allowReorder: 1,\n  alphabetic: 0,\n  amplitude: 0,\n  arabicForm: 1,\n  'arabic-form': 'arabicForm',\n  ascent: 0,\n  attributeName: 1,\n  attributeType: 1,\n  autoReverse: 1,\n  azimuth: 0,\n  baseFrequency: 1,\n  baselineShift: 1,\n  'baseline-shift': 'baselineShift',\n  baseProfile: 1,\n  bbox: 0,\n  begin: 0,\n  bias: 0,\n  by: 0,\n  calcMode: 1,\n  capHeight: 1,\n  'cap-height': 'capHeight',\n  clip: 0,\n  clipPath: 1,\n  'clip-path': 'clipPath',\n  clipPathUnits: 1,\n  clipRule: 1,\n  'clip-rule': 'clipRule',\n  color: 0,\n  colorInterpolation: 1,\n  'color-interpolation': 'colorInterpolation',\n  colorInterpolationFilters: 1,\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorProfile: 1,\n  'color-profile': 'colorProfile',\n  colorRendering: 1,\n  'color-rendering': 'colorRendering',\n  contentScriptType: 1,\n  contentStyleType: 1,\n  cursor: 0,\n  cx: 0,\n  cy: 0,\n  d: 0,\n  datatype: 0,\n  decelerate: 0,\n  descent: 0,\n  diffuseConstant: 1,\n  direction: 0,\n  display: 0,\n  divisor: 0,\n  dominantBaseline: 1,\n  'dominant-baseline': 'dominantBaseline',\n  dur: 0,\n  dx: 0,\n  dy: 0,\n  edgeMode: 1,\n  elevation: 0,\n  enableBackground: 1,\n  'enable-background': 'enableBackground',\n  end: 0,\n  exponent: 0,\n  externalResourcesRequired: 1,\n  fill: 0,\n  fillOpacity: 1,\n  'fill-opacity': 'fillOpacity',\n  fillRule: 1,\n  'fill-rule': 'fillRule',\n  filter: 0,\n  filterRes: 1,\n  filterUnits: 1,\n  floodOpacity: 1,\n  'flood-opacity': 'floodOpacity',\n  floodColor: 1,\n  'flood-color': 'floodColor',\n  focusable: 0,\n  fontFamily: 1,\n  'font-family': 'fontFamily',\n  fontSize: 1,\n  'font-size': 'fontSize',\n  fontSizeAdjust: 1,\n  'font-size-adjust': 'fontSizeAdjust',\n  fontStretch: 1,\n  'font-stretch': 'fontStretch',\n  fontStyle: 1,\n  'font-style': 'fontStyle',\n  fontVariant: 1,\n  'font-variant': 'fontVariant',\n  fontWeight: 1,\n  'font-weight': 'fontWeight',\n  format: 0,\n  from: 0,\n  fx: 0,\n  fy: 0,\n  g1: 0,\n  g2: 0,\n  glyphName: 1,\n  'glyph-name': 'glyphName',\n  glyphOrientationHorizontal: 1,\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphOrientationVertical: 1,\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphRef: 1,\n  gradientTransform: 1,\n  gradientUnits: 1,\n  hanging: 0,\n  horizAdvX: 1,\n  'horiz-adv-x': 'horizAdvX',\n  horizOriginX: 1,\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 0,\n  imageRendering: 1,\n  'image-rendering': 'imageRendering',\n  in2: 0,\n  in: 0,\n  inlist: 0,\n  intercept: 0,\n  k1: 0,\n  k2: 0,\n  k3: 0,\n  k4: 0,\n  k: 0,\n  kernelMatrix: 1,\n  kernelUnitLength: 1,\n  kerning: 0,\n  keyPoints: 1,\n  keySplines: 1,\n  keyTimes: 1,\n  lengthAdjust: 1,\n  letterSpacing: 1,\n  'letter-spacing': 'letterSpacing',\n  lightingColor: 1,\n  'lighting-color': 'lightingColor',\n  limitingConeAngle: 1,\n  local: 0,\n  markerEnd: 1,\n  'marker-end': 'markerEnd',\n  markerHeight: 1,\n  markerMid: 1,\n  'marker-mid': 'markerMid',\n  markerStart: 1,\n  'marker-start': 'markerStart',\n  markerUnits: 1,\n  markerWidth: 1,\n  mask: 0,\n  maskContentUnits: 1,\n  maskUnits: 1,\n  mathematical: 0,\n  mode: 0,\n  numOctaves: 1,\n  offset: 0,\n  opacity: 0,\n  operator: 0,\n  order: 0,\n  orient: 0,\n  orientation: 0,\n  origin: 0,\n  overflow: 0,\n  overlinePosition: 1,\n  'overline-position': 'overlinePosition',\n  overlineThickness: 1,\n  'overline-thickness': 'overlineThickness',\n  paintOrder: 1,\n  'paint-order': 'paintOrder',\n  panose1: 0,\n  'panose-1': 'panose1',\n  pathLength: 1,\n  patternContentUnits: 1,\n  patternTransform: 1,\n  patternUnits: 1,\n  pointerEvents: 1,\n  'pointer-events': 'pointerEvents',\n  points: 0,\n  pointsAtX: 1,\n  pointsAtY: 1,\n  pointsAtZ: 1,\n  prefix: 0,\n  preserveAlpha: 1,\n  preserveAspectRatio: 1,\n  primitiveUnits: 1,\n  property: 0,\n  r: 0,\n  radius: 0,\n  refX: 1,\n  refY: 1,\n  renderingIntent: 1,\n  'rendering-intent': 'renderingIntent',\n  repeatCount: 1,\n  repeatDur: 1,\n  requiredExtensions: 1,\n  requiredFeatures: 1,\n  resource: 0,\n  restart: 0,\n  result: 0,\n  results: 0,\n  rotate: 0,\n  rx: 0,\n  ry: 0,\n  scale: 0,\n  security: 0,\n  seed: 0,\n  shapeRendering: 1,\n  'shape-rendering': 'shapeRendering',\n  slope: 0,\n  spacing: 0,\n  specularConstant: 1,\n  specularExponent: 1,\n  speed: 0,\n  spreadMethod: 1,\n  startOffset: 1,\n  stdDeviation: 1,\n  stemh: 0,\n  stemv: 0,\n  stitchTiles: 1,\n  stopColor: 1,\n  'stop-color': 'stopColor',\n  stopOpacity: 1,\n  'stop-opacity': 'stopOpacity',\n  strikethroughPosition: 1,\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughThickness: 1,\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 0,\n  stroke: 0,\n  strokeDasharray: 1,\n  'stroke-dasharray': 'strokeDasharray',\n  strokeDashoffset: 1,\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokeLinecap: 1,\n  'stroke-linecap': 'strokeLinecap',\n  strokeLinejoin: 1,\n  'stroke-linejoin': 'strokeLinejoin',\n  strokeMiterlimit: 1,\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokeWidth: 1,\n  'stroke-width': 'strokeWidth',\n  strokeOpacity: 1,\n  'stroke-opacity': 'strokeOpacity',\n  suppressContentEditableWarning: 1,\n  suppressHydrationWarning: 1,\n  surfaceScale: 1,\n  systemLanguage: 1,\n  tableValues: 1,\n  targetX: 1,\n  targetY: 1,\n  textAnchor: 1,\n  'text-anchor': 'textAnchor',\n  textDecoration: 1,\n  'text-decoration': 'textDecoration',\n  textLength: 1,\n  textRendering: 1,\n  'text-rendering': 'textRendering',\n  to: 0,\n  transform: 0,\n  typeof: 0,\n  u1: 0,\n  u2: 0,\n  underlinePosition: 1,\n  'underline-position': 'underlinePosition',\n  underlineThickness: 1,\n  'underline-thickness': 'underlineThickness',\n  unicode: 0,\n  unicodeBidi: 1,\n  'unicode-bidi': 'unicodeBidi',\n  unicodeRange: 1,\n  'unicode-range': 'unicodeRange',\n  unitsPerEm: 1,\n  'units-per-em': 'unitsPerEm',\n  unselectable: 0,\n  vAlphabetic: 1,\n  'v-alphabetic': 'vAlphabetic',\n  values: 0,\n  vectorEffect: 1,\n  'vector-effect': 'vectorEffect',\n  version: 0,\n  vertAdvY: 1,\n  'vert-adv-y': 'vertAdvY',\n  vertOriginX: 1,\n  'vert-origin-x': 'vertOriginX',\n  vertOriginY: 1,\n  'vert-origin-y': 'vertOriginY',\n  vHanging: 1,\n  'v-hanging': 'vHanging',\n  vIdeographic: 1,\n  'v-ideographic': 'vIdeographic',\n  viewBox: 1,\n  viewTarget: 1,\n  visibility: 0,\n  vMathematical: 1,\n  'v-mathematical': 'vMathematical',\n  vocab: 0,\n  widths: 0,\n  wordSpacing: 1,\n  'word-spacing': 'wordSpacing',\n  writingMode: 1,\n  'writing-mode': 'writingMode',\n  x1: 0,\n  x2: 0,\n  x: 0,\n  xChannelSelector: 1,\n  xHeight: 1,\n  'x-height': 'xHeight',\n  xlinkActuate: 1,\n  'xlink:actuate': 'xlinkActuate',\n  xlinkArcrole: 1,\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkHref: 1,\n  'xlink:href': 'xlinkHref',\n  xlinkRole: 1,\n  'xlink:role': 'xlinkRole',\n  xlinkShow: 1,\n  'xlink:show': 'xlinkShow',\n  xlinkTitle: 1,\n  'xlink:title': 'xlinkTitle',\n  xlinkType: 1,\n  'xlink:type': 'xlinkType',\n  xmlBase: 1,\n  'xml:base': 'xmlBase',\n  xmlLang: 1,\n  'xml:lang': 'xmlLang',\n  xmlns: 0,\n  'xml:space': 'xmlSpace',\n  xmlnsXlink: 1,\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlSpace: 1,\n  y1: 0,\n  y2: 0,\n  y: 0,\n  yChannelSelector: 1,\n  z: 0,\n  zoomAndPan: 1\n};\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\nvar reduceFunctionCall = require(\"reduce-function-call\")\nvar mexp = require(\"math-expression-evaluator\")\n\n/**\n * Constantes\n */\nvar MAX_STACK = 100 // should be enough for a single calc()...\nvar NESTED_CALC_RE = /(\\+|\\-|\\*|\\\\|[^a-z]|)(\\s*)(\\()/g\n\n/**\n * Global variables\n */\nvar stack\n\n/**\n * Expose reduceCSSCalc plugin\n *\n * @type {Function}\n */\nmodule.exports = reduceCSSCalc\n\n/**\n * Reduce CSS calc() in a string, whenever it's possible\n *\n * @param {String} value css input\n */\nfunction reduceCSSCalc(value, decimalPrecision) {\n  stack = 0\n  decimalPrecision = Math.pow(10, decimalPrecision === undefined ? 5 : decimalPrecision)\n\n  // Allow calc() on multiple lines\n  value = value.replace(/\\n+/g, \" \")\n\n  /**\n   * Evaluates an expression\n   *\n   * @param {String} expression\n   * @returns {String}\n   */\n  function evaluateExpression (expression, functionIdentifier, call) {\n    if (stack++ > MAX_STACK) {\n      stack = 0\n      throw new Error(\"Call stack overflow for \" + call)\n    }\n\n    if (expression === \"\") {\n      throw new Error(functionIdentifier + \"(): '\" + call + \"' must contain a non-whitespace string\")\n    }\n\n    expression = evaluateNestedExpression(expression, call)\n\n    var units = getUnitsInExpression(expression)\n\n    // If the expression contains multiple units or CSS variables,\n    // then let the expression be (i.e. browser calc())\n    if (units.length > 1 || expression.indexOf(\"var(\") > -1) {\n      return functionIdentifier + \"(\" + expression + \")\"\n    }\n\n    var unit = units[0] || \"\"\n\n    if (unit === \"%\") {\n      // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%):\n      // console.log(expression)\n      expression = expression.replace(/\\b[0-9\\.]+%/g, function(percent) {\n        return parseFloat(percent.slice(0, -1)) * 0.01\n      })\n    }\n\n    // Remove units in expression:\n    var toEvaluate = expression.replace(new RegExp(unit, \"gi\"), \"\")\n    var result\n\n    try {\n      result = mexp.eval(toEvaluate)\n    }\n    catch (e) {\n      return functionIdentifier + \"(\" + expression + \")\"\n    }\n\n    // Transform back to a percentage result:\n    if (unit === \"%\") {\n      result *= 100\n    }\n\n    // adjust rounding shit\n    // (0.1 * 0.2 === 0.020000000000000004)\n    if (functionIdentifier.length || unit === \"%\") {\n      result = Math.round(result * decimalPrecision) / decimalPrecision\n    }\n\n    // Add unit\n    result += unit\n\n    return result\n  }\n\n  /**\n   * Evaluates nested expressions\n   *\n   * @param {String} expression\n   * @returns {String}\n   */\n  function evaluateNestedExpression(expression, call) {\n    // Remove the calc part from nested expressions to ensure\n    // better browser compatibility\n    expression = expression.replace(/((?:\\-[a-z]+\\-)?calc)/g, \"\")\n    var evaluatedPart = \"\"\n    var nonEvaluatedPart = expression\n    var matches\n    while ((matches = NESTED_CALC_RE.exec(nonEvaluatedPart))) {\n      if (matches[0].index > 0) {\n        evaluatedPart += nonEvaluatedPart.substring(0, matches[0].index)\n      }\n\n      var balancedExpr = balanced(\"(\", \")\", nonEvaluatedPart.substring([0].index))\n      if (balancedExpr.body === \"\") {\n        throw new Error(\"'\" + expression + \"' must contain a non-whitespace string\")\n      }\n\n      var evaluated = evaluateExpression(balancedExpr.body, \"\", call)\n\n      evaluatedPart += balancedExpr.pre + evaluated\n      nonEvaluatedPart = balancedExpr.post\n    }\n\n    return evaluatedPart + nonEvaluatedPart\n  }\n\n  return reduceFunctionCall(value, /((?:\\-[a-z]+\\-)?calc)\\(/, evaluateExpression)\n}\n\n/**\n * Checks what units are used in an expression\n *\n * @param {String} expression\n * @returns {Array}\n */\n\nfunction getUnitsInExpression(expression) {\n  var uniqueUnits = []\n  var uniqueLowerCaseUnits = []\n  var unitRegEx = /[\\.0-9]([%a-z]+)/gi\n  var matches = unitRegEx.exec(expression)\n\n  while (matches) {\n    if (!matches || !matches[1]) {\n      continue\n    }\n\n    if (uniqueLowerCaseUnits.indexOf(matches[1].toLowerCase()) === -1) {\n      uniqueUnits.push(matches[1])\n      uniqueLowerCaseUnits.push(matches[1].toLowerCase())\n    }\n\n    matches = unitRegEx.exec(expression)\n  }\n\n  return uniqueUnits\n}\n","module.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n","/*\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\n\n/**\n * Expose `reduceFunctionCall`\n *\n * @type {Function}\n */\nmodule.exports = reduceFunctionCall\n\n/**\n * Walkthrough all expressions, evaluate them and insert them into the declaration\n *\n * @param {Array} expressions\n * @param {Object} declaration\n */\n\nfunction reduceFunctionCall(string, functionRE, callback) {\n  var call = string\n  return getFunctionCalls(string, functionRE).reduce(function(string, obj) {\n    return string.replace(obj.functionIdentifier + \"(\" + obj.matches.body + \")\", evalFunctionCall(obj.matches.body, obj.functionIdentifier, callback, call, functionRE))\n  }, string)\n}\n\n/**\n * Parses expressions in a value\n *\n * @param {String} value\n * @returns {Array}\n * @api private\n */\n\nfunction getFunctionCalls(call, functionRE) {\n  var expressions = []\n\n  var fnRE = typeof functionRE === \"string\" ? new RegExp(\"\\\\b(\" + functionRE + \")\\\\(\") : functionRE\n  do {\n    var searchMatch = fnRE.exec(call)\n    if (!searchMatch) {\n      return expressions\n    }\n    if (searchMatch[1] === undefined) {\n      throw new Error(\"Missing the first couple of parenthesis to get the function identifier in \" + functionRE)\n    }\n    var fn = searchMatch[1]\n    var startIndex = searchMatch.index\n    var matches = balanced(\"(\", \")\", call.substring(startIndex))\n\n    if (!matches || matches.start !== searchMatch[0].length - 1) {\n      throw new SyntaxError(fn + \"(): missing closing ')' in the value '\" + call + \"'\")\n    }\n\n    expressions.push({matches: matches, functionIdentifier: fn})\n    call = matches.post\n  }\n  while (fnRE.test(call))\n\n  return expressions\n}\n\n/**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n * @api private\n */\n\nfunction evalFunctionCall (string, functionIdentifier, callback, call, functionRE) {\n  // allow recursivity\n  return callback(reduceFunctionCall(string, functionRE, callback), functionIdentifier, call)\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","import StyleToObject from 'style-to-object';\nimport { camelCase, CamelCaseOptions } from './utilities';\n\ntype StyleObject = Record<string, string>;\n\ninterface StyleToJSOptions extends CamelCaseOptions {}\n\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style: string, options?: StyleToJSOptions): StyleObject {\n  const output: StyleObject = {};\n\n  if (!style || typeof style !== 'string') {\n    return output;\n  }\n\n  StyleToObject(style, (property, value) => {\n    // skip CSS comment\n    if (property && value) {\n      output[camelCase(property, options)] = value;\n    }\n  });\n\n  return output;\n}\n\nStyleToJS.default = StyleToJS;\n\nexport = StyleToJS;\n","const CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nconst HYPHEN_REGEX = /-([a-z])/g;\nconst NO_HYPHEN_REGEX = /^[^-]+$/;\nconst VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nconst MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n\n/**\n * Checks whether to skip camelCase.\n */\nconst skipCamelCase = (property: string) =>\n  !property ||\n  NO_HYPHEN_REGEX.test(property) ||\n  CUSTOM_PROPERTY_REGEX.test(property);\n\n/**\n * Replacer that capitalizes first character.\n */\nconst capitalize = (match: string, character: string) =>\n  character.toUpperCase();\n\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nconst trimHyphen = (match: string, prefix: string) => `${prefix}-`;\n\n/**\n * CamelCase options.\n */\nexport interface CamelCaseOptions {\n  reactCompat?: boolean;\n}\n\n/**\n * CamelCases a CSS property.\n */\nexport const camelCase = (property: string, options: CamelCaseOptions = {}) => {\n  if (skipCamelCase(property)) {\n    return property;\n  }\n\n  property = property.toLowerCase();\n\n  if (options.reactCompat) {\n    // `-ms` vendor prefix should not be capitalized\n    property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n  } else {\n    // for non-React, remove first hyphen so vendor prefix is not capitalized\n    property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n  }\n\n  return property.replace(HYPHEN_REGEX, capitalize);\n};\n","import parse from 'inline-style-parser';\nimport type { Declaration } from 'inline-style-parser';\n\nexport { Declaration };\n\ninterface StyleObject {\n  [name: string]: string;\n}\n\ntype Iterator = (\n  property: string,\n  value: string,\n  declaration: Declaration,\n) => void;\n\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nexport default function StyleToObject(\n  style: string,\n  iterator?: Iterator,\n): StyleObject | null {\n  let styleObject: StyleObject | null = null;\n\n  if (!style || typeof style !== 'string') {\n    return styleObject;\n  }\n\n  const declarations = parse(style);\n  const hasIterator = typeof iterator === 'function';\n\n  declarations.forEach((declaration) => {\n    if (declaration.type !== 'declaration') {\n      return;\n    }\n\n    const { property, value } = declaration;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      styleObject = styleObject || {};\n      styleObject[property] = value;\n    }\n  });\n\n  return styleObject;\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"1f7f832d\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + \"60c55564\" + \".chunk.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"cra:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/modules/custom/gutt_provision_dashboard/build/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"660\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\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\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcra\"] = self[\"webpackChunkcra\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext?: ContextValueType\n) {\n  const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n  function Provider(props: ContextValueType & { children: React.ReactNode }) {\n    const { children, ...context } = props;\n    // Only re-memoize when prop values change\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n    return <Context.Provider value={value}>{children}</Context.Provider>;\n  }\n\n  function useContext(consumerName: string) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== undefined) return defaultContext;\n    // if a defaultContext wasn't specified, it's a required context.\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n\n  Provider.displayName = rootComponentName + 'Provider';\n  return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n  scopeName: string;\n  (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n  let defaultContexts: any[] = [];\n\n  /* -----------------------------------------------------------------------------------------------\n   * createContext\n   * ---------------------------------------------------------------------------------------------*/\n\n  function createContext<ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext?: ContextValueType\n  ) {\n    const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n\n    function Provider(\n      props: ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n    ) {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName][index] || BaseContext;\n      // Only re-memoize when prop values change\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n      return <Context.Provider value={value}>{children}</Context.Provider>;\n    }\n\n    function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n      const Context = scope?.[scopeName][index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== undefined) return defaultContext;\n      // if a defaultContext wasn't specified, it's a required context.\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n\n    Provider.displayName = rootComponentName + 'Provider';\n    return [Provider, useContext] as const;\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * createScope\n   * ---------------------------------------------------------------------------------------------*/\n\n  const createScope: CreateScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope: Scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n\n  createScope.scopeName = scopeName;\n  return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n\n  const createScope: CreateScope = () => {\n    const scopeHooks = scopes.map((createScope) => ({\n      useScope: createScope(),\n      scopeName: createScope.scopeName,\n    }));\n\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n        // We are calling a hook inside a callback which React warns against to avoid inconsistent\n        // renders, however, scoping doesn't have render side effects so we ignore the rule.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes, ...currentScope };\n      }, {});\n\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    (ref as React.MutableRefObject<T>).current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]) {\n  return (node: T) => refs.forEach((ref) => setRef(ref, node));\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]) {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n  children?: React.ReactNode;\n}\n\nconst Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n  const childrenArray = React.Children.toArray(children);\n  const slottable = childrenArray.find(isSlottable);\n\n  if (slottable) {\n    // the new element to render is the one passed as a child of `Slottable`\n    const newElement = slottable.props.children as React.ReactNode;\n\n    const newChildren = childrenArray.map((child) => {\n      if (child === slottable) {\n        // because the new element will be the one rendered, we are only interested\n        // in grabbing its children (`newElement.props.children`)\n        if (React.Children.count(newElement) > 1) return React.Children.only(null);\n        return React.isValidElement(newElement)\n          ? (newElement.props.children as React.ReactNode)\n          : null;\n      } else {\n        return child;\n      }\n    });\n\n    return (\n      <SlotClone {...slotProps} ref={forwardedRef}>\n        {React.isValidElement(newElement)\n          ? React.cloneElement(newElement, undefined, newChildren)\n          : null}\n      </SlotClone>\n    );\n  }\n\n  return (\n    <SlotClone {...slotProps} ref={forwardedRef}>\n      {children}\n    </SlotClone>\n  );\n});\n\nSlot.displayName = 'Slot';\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n  children: React.ReactNode;\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n\n  if (React.isValidElement(children)) {\n    const childrenRef = getElementRef(children);\n    return React.cloneElement(children, {\n      ...mergeProps(slotProps, children.props),\n      // @ts-ignore\n      ref: forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef,\n    });\n  }\n\n  return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\n\nSlotClone.displayName = 'SlotClone';\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst Slottable = ({ children }: { children: React.ReactNode }) => {\n  return <>{children}</>;\n};\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n  return React.isValidElement(child) && child.type === Slottable;\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n  // all child props should override\n  const overrideProps = { ...childProps };\n\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      // if the handler exists on both, we compose them\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args: unknown[]) => {\n          childPropValue(...args);\n          slotPropValue(...args);\n        };\n      }\n      // but if it exists only on the slot, we use only this one\n      else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    }\n    // if it's `style`, we merge them\n    else if (propName === 'style') {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === 'className') {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n    }\n  }\n\n  return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n\n  // Not DEV\n  return element.props.ref || (element as any).ref;\n}\n\nconst Root = Slot;\n\nexport {\n  Slot,\n  Slottable,\n  //\n  Root,\n};\nexport type { SlotProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n  scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionProvider\n   * ---------------------------------------------------------------------------------------------*/\n\n  const PROVIDER_NAME = name + 'CollectionProvider';\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n  type ContextValue = {\n    collectionRef: React.RefObject<CollectionElement>;\n    itemMap: Map<React.RefObject<ItemElement>, { ref: React.RefObject<ItemElement> } & ItemData>;\n  };\n\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: new Map() }\n  );\n\n  const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef<CollectionElement>(null);\n    const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n    return (\n      <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n        {children}\n      </CollectionProviderImpl>\n    );\n  };\n\n  CollectionProvider.displayName = PROVIDER_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionSlot\n   * ---------------------------------------------------------------------------------------------*/\n\n  const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n  const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n      return <Slot ref={composedRefs}>{children}</Slot>;\n    }\n  );\n\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * CollectionItem\n   * ---------------------------------------------------------------------------------------------*/\n\n  const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n  const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n  type CollectionItemSlotProps = ItemData & {\n    children: React.ReactNode;\n    scope: any;\n  };\n\n  const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef<ItemElement>(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n        return () => void context.itemMap.delete(ref);\n      });\n\n      return (\n        <Slot {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n          {children}\n        </Slot>\n      );\n    }\n  );\n\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n  /* -----------------------------------------------------------------------------------------------\n   * useCollection\n   * ---------------------------------------------------------------------------------------------*/\n\n  function useCollection(scope: any) {\n    const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n    const getItems = React.useCallback(() => {\n      const collectionNode = context.collectionRef.current;\n      if (!collectionNode) return [];\n      const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n      const items = Array.from(context.itemMap.values());\n      const orderedItems = items.sort(\n        (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n      );\n      return orderedItems;\n    }, [context.collectionRef, context.itemMap]);\n\n    return getItems;\n  }\n\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope,\n  ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n","function composeEventHandlers<E>(\n  originalEventHandler?: (event: E) => void,\n  ourEventHandler?: (event: E) => void,\n  { checkForDefaultPrevented = true } = {}\n) {\n  return function handleEvent(event: E) {\n    originalEventHandler?.(event);\n\n    if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\n\nexport { composeEventHandlers };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n  const callbackRef = React.useRef(callback);\n\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n\n  // https://github.com/facebook/react/issues/19240\n  return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\ntype UseControllableStateParams<T> = {\n  prop?: T | undefined;\n  defaultProp?: T | undefined;\n  onChange?: (state: T) => void;\n};\n\ntype SetStateFn<T> = (prevState?: T) => T;\n\nfunction useControllableState<T>({\n  prop,\n  defaultProp,\n  onChange = () => {},\n}: UseControllableStateParams<T>) {\n  const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledProp;\n  const handleChange = useCallbackRef(onChange);\n\n  const setValue: React.Dispatch<React.SetStateAction<T | undefined>> = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const setter = nextValue as SetStateFn<T>;\n        const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n        if (value !== prop) handleChange(value as T);\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, handleChange]\n  );\n\n  return [value, setValue] as const;\n}\n\nfunction useUncontrolledState<T>({\n  defaultProp,\n  onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>) {\n  const uncontrolledState = React.useState<T | undefined>(defaultProp);\n  const [value] = uncontrolledState;\n  const prevValueRef = React.useRef(value);\n  const handleChange = useCallbackRef(onChange);\n\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      handleChange(value as T);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef, handleChange]);\n\n  return uncontrolledState;\n}\n\nexport { useControllableState };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Slot } from '@radix-ui/react-slot';\n\nconst NODES = [\n  'a',\n  'button',\n  'div',\n  'form',\n  'h2',\n  'h3',\n  'img',\n  'input',\n  'label',\n  'li',\n  'nav',\n  'ol',\n  'p',\n  'span',\n  'svg',\n  'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n  asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n  extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n  const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp: any = asChild ? Slot : node;\n\n    if (typeof window !== 'undefined') {\n      (window as any)[Symbol.for('radix-ui')] = true;\n    }\n\n    return <Comp {...primitiveProps} ref={forwardedRef} />;\n  });\n\n  Node.displayName = `Primitive.${node}`;\n\n  return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n *  - discrete\n *  - continuous\n *  - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an  important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n  Primitive,\n  //\n  Root,\n  //\n  dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n  children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n  present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n\n  const child = (\n    typeof children === 'function'\n      ? children({ present: presence.isPresent })\n      : React.Children.only(children)\n  ) as React.ReactElement;\n\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === 'function';\n  return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n  const [node, setNode] = React.useState<HTMLElement>();\n  const stylesRef = React.useRef<CSSStyleDeclaration>({} as any);\n  const prevPresentRef = React.useRef(present);\n  const prevAnimationNameRef = React.useRef<string>('none');\n  const initialState = present ? 'mounted' : 'unmounted';\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: 'unmounted',\n      ANIMATION_OUT: 'unmountSuspended',\n    },\n    unmountSuspended: {\n      MOUNT: 'mounted',\n      ANIMATION_END: 'unmounted',\n    },\n    unmounted: {\n      MOUNT: 'mounted',\n    },\n  });\n\n  React.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n  }, [state]);\n\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n\n      if (present) {\n        send('MOUNT');\n      } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n        // If there is no exit animation or the element is hidden, animations won't run\n        // so we unmount instantly\n        send('UNMOUNT');\n      } else {\n        /**\n         * When `present` changes to `false`, we check changes to animation-name to\n         * determine whether an animation has started. We chose this approach (reading\n         * computed styles) because there is no `animationrun` event and `animationstart`\n         * fires after `animation-delay` has expired which would be too late.\n         */\n        const isAnimating = prevAnimationName !== currentAnimationName;\n\n        if (wasPresent && isAnimating) {\n          send('ANIMATION_OUT');\n        } else {\n          send('UNMOUNT');\n        }\n      }\n\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n\n  useLayoutEffect(() => {\n    if (node) {\n      /**\n       * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n       * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n       * make sure we only trigger ANIMATION_END for the currently active animation.\n       */\n      const handleAnimationEnd = (event: AnimationEvent) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n        if (event.target === node && isCurrentAnimation) {\n          // With React 18 concurrency this update is applied\n          // a frame after the animation ends, creating a flash of visible content.\n          // By manually flushing we ensure they sync within a frame, removing the flash.\n          ReactDOM.flushSync(() => send('ANIMATION_END'));\n        }\n      };\n      const handleAnimationStart = (event: AnimationEvent) => {\n        if (event.target === node) {\n          // if animation occurred, store its name as the previous animation.\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener('animationstart', handleAnimationStart);\n      node.addEventListener('animationcancel', handleAnimationEnd);\n      node.addEventListener('animationend', handleAnimationEnd);\n      return () => {\n        node.removeEventListener('animationstart', handleAnimationStart);\n        node.removeEventListener('animationcancel', handleAnimationEnd);\n        node.removeEventListener('animationend', handleAnimationEnd);\n      };\n    } else {\n      // Transition to the unmounted state if the node is removed prematurely.\n      // We avoid doing so during cleanup as the node may change but still exist.\n      send('ANIMATION_END');\n    }\n  }, [node, send]);\n\n  return {\n    isPresent: ['mounted', 'unmountSuspended'].includes(state),\n    ref: React.useCallback((node: HTMLElement) => {\n      if (node) stylesRef.current = getComputedStyle(node);\n      setNode(node);\n    }, []),\n  };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n  return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n\n  // Not DEV\n  return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n  ? R\n  : never;\n\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>\n) {\n  return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n    const nextState = (machine[state] as any)[event];\n    return nextState ?? state;\n  }, initialState);\n}\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We `toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)['useId'.toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n  const [id, setId] = React.useState<string | undefined>(useReactId());\n  // React versions older than 18 will have client-side ids only.\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Collapsible\n * -----------------------------------------------------------------------------------------------*/\n\nconst COLLAPSIBLE_NAME = 'Collapsible';\n\ntype ScopedProps<P> = P & { __scopeCollapsible?: Scope };\nconst [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\n\ntype CollapsibleContextValue = {\n  contentId: string;\n  disabled?: boolean;\n  open: boolean;\n  onOpenToggle(): void;\n};\n\nconst [CollapsibleProvider, useCollapsibleContext] =\n  createCollapsibleContext<CollapsibleContextValue>(COLLAPSIBLE_NAME);\n\ntype CollapsibleElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface CollapsibleProps extends PrimitiveDivProps {\n  defaultOpen?: boolean;\n  open?: boolean;\n  disabled?: boolean;\n  onOpenChange?(open: boolean): void;\n}\n\nconst Collapsible = React.forwardRef<CollapsibleElement, CollapsibleProps>(\n  (props: ScopedProps<CollapsibleProps>, forwardedRef) => {\n    const {\n      __scopeCollapsible,\n      open: openProp,\n      defaultOpen,\n      disabled,\n      onOpenChange,\n      ...collapsibleProps\n    } = props;\n\n    const [open = false, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen,\n      onChange: onOpenChange,\n    });\n\n    return (\n      <CollapsibleProvider\n        scope={__scopeCollapsible}\n        disabled={disabled}\n        contentId={useId()}\n        open={open}\n        onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n      >\n        <Primitive.div\n          data-state={getState(open)}\n          data-disabled={disabled ? '' : undefined}\n          {...collapsibleProps}\n          ref={forwardedRef}\n        />\n      </CollapsibleProvider>\n    );\n  }\n);\n\nCollapsible.displayName = COLLAPSIBLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CollapsibleTrigger';\n\ntype CollapsibleTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface CollapsibleTriggerProps extends PrimitiveButtonProps {}\n\nconst CollapsibleTrigger = React.forwardRef<CollapsibleTriggerElement, CollapsibleTriggerProps>(\n  (props: ScopedProps<CollapsibleTriggerProps>, forwardedRef) => {\n    const { __scopeCollapsible, ...triggerProps } = props;\n    const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n    return (\n      <Primitive.button\n        type=\"button\"\n        aria-controls={context.contentId}\n        aria-expanded={context.open || false}\n        data-state={getState(context.open)}\n        data-disabled={context.disabled ? '' : undefined}\n        disabled={context.disabled}\n        {...triggerProps}\n        ref={forwardedRef}\n        onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n      />\n    );\n  }\n);\n\nCollapsibleTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'CollapsibleContent';\n\ntype CollapsibleContentElement = CollapsibleContentImplElement;\ninterface CollapsibleContentProps extends Omit<CollapsibleContentImplProps, 'present'> {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: true;\n}\n\nconst CollapsibleContent = React.forwardRef<CollapsibleContentElement, CollapsibleContentProps>(\n  (props: ScopedProps<CollapsibleContentProps>, forwardedRef) => {\n    const { forceMount, ...contentProps } = props;\n    const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n    return (\n      <Presence present={forceMount || context.open}>\n        {({ present }) => (\n          <CollapsibleContentImpl {...contentProps} ref={forwardedRef} present={present} />\n        )}\n      </Presence>\n    );\n  }\n);\n\nCollapsibleContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype CollapsibleContentImplElement = React.ElementRef<typeof Primitive.div>;\ninterface CollapsibleContentImplProps extends PrimitiveDivProps {\n  present: boolean;\n}\n\nconst CollapsibleContentImpl = React.forwardRef<\n  CollapsibleContentImplElement,\n  CollapsibleContentImplProps\n>((props: ScopedProps<CollapsibleContentImplProps>, forwardedRef) => {\n  const { __scopeCollapsible, present, children, ...contentProps } = props;\n  const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n  const [isPresent, setIsPresent] = React.useState(present);\n  const ref = React.useRef<CollapsibleContentImplElement>(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const heightRef = React.useRef<number | undefined>(0);\n  const height = heightRef.current;\n  const widthRef = React.useRef<number | undefined>(0);\n  const width = widthRef.current;\n  // when opening we want it to immediately open to retrieve dimensions\n  // when closing we delay `present` to retrieve dimensions before closing\n  const isOpen = context.open || isPresent;\n  const isMountAnimationPreventedRef = React.useRef(isOpen);\n  const originalStylesRef = React.useRef<Record<string, string>>();\n\n  React.useEffect(() => {\n    const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n    return () => cancelAnimationFrame(rAF);\n  }, []);\n\n  useLayoutEffect(() => {\n    const node = ref.current;\n    if (node) {\n      originalStylesRef.current = originalStylesRef.current || {\n        transitionDuration: node.style.transitionDuration,\n        animationName: node.style.animationName,\n      };\n      // block any animations/transitions so the element renders at its full dimensions\n      node.style.transitionDuration = '0s';\n      node.style.animationName = 'none';\n\n      // get width and height from full dimensions\n      const rect = node.getBoundingClientRect();\n      heightRef.current = rect.height;\n      widthRef.current = rect.width;\n\n      // kick off any animations/transitions that were originally set up if it isn't the initial mount\n      if (!isMountAnimationPreventedRef.current) {\n        node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n        node.style.animationName = originalStylesRef.current.animationName;\n      }\n\n      setIsPresent(present);\n    }\n    /**\n     * depends on `context.open` because it will change to `false`\n     * when a close is triggered but `present` will be `false` on\n     * animation end (so when close finishes). This allows us to\n     * retrieve the dimensions *before* closing.\n     */\n  }, [context.open, present]);\n\n  return (\n    <Primitive.div\n      data-state={getState(context.open)}\n      data-disabled={context.disabled ? '' : undefined}\n      id={context.contentId}\n      hidden={!isOpen}\n      {...contentProps}\n      ref={composedRefs}\n      style={{\n        [`--radix-collapsible-content-height` as any]: height ? `${height}px` : undefined,\n        [`--radix-collapsible-content-width` as any]: width ? `${width}px` : undefined,\n        ...props.style,\n      }}\n    >\n      {isOpen && children}\n    </Primitive.div>\n  );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n  return open ? 'open' : 'closed';\n}\n\nconst Root = Collapsible;\nconst Trigger = CollapsibleTrigger;\nconst Content = CollapsibleContent;\n\nexport {\n  createCollapsibleScope,\n  //\n  Collapsible,\n  CollapsibleTrigger,\n  CollapsibleContent,\n  //\n  Root,\n  Trigger,\n  Content,\n};\nexport type { CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps };\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n  children?: React.ReactNode;\n  dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n  const { dir, children } = props;\n  return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n  useDirection,\n  //\n  Provider,\n  //\n  DirectionProvider,\n};\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\nimport { createCollapsibleScope } from '@radix-ui/react-collapsible';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACCORDION_NAME = 'Accordion';\nconst ACCORDION_KEYS = ['Home', 'End', 'ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowRight'];\n\nconst [Collection, useCollection, createCollectionScope] =\n  createCollection<AccordionTriggerElement>(ACCORDION_NAME);\n\ntype ScopedProps<P> = P & { __scopeAccordion?: Scope };\nconst [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n  createCollectionScope,\n  createCollapsibleScope,\n]);\nconst useCollapsibleScope = createCollapsibleScope();\n\ntype AccordionElement = AccordionImplMultipleElement | AccordionImplSingleElement;\ninterface AccordionSingleProps extends AccordionImplSingleProps {\n  type: 'single';\n}\ninterface AccordionMultipleProps extends AccordionImplMultipleProps {\n  type: 'multiple';\n}\n\nconst Accordion = React.forwardRef<AccordionElement, AccordionSingleProps | AccordionMultipleProps>(\n  (props: ScopedProps<AccordionSingleProps | AccordionMultipleProps>, forwardedRef) => {\n    const { type, ...accordionProps } = props;\n    const singleProps = accordionProps as AccordionImplSingleProps;\n    const multipleProps = accordionProps as AccordionImplMultipleProps;\n    return (\n      <Collection.Provider scope={props.__scopeAccordion}>\n        {type === 'multiple' ? (\n          <AccordionImplMultiple {...multipleProps} ref={forwardedRef} />\n        ) : (\n          <AccordionImplSingle {...singleProps} ref={forwardedRef} />\n        )}\n      </Collection.Provider>\n    );\n  }\n);\n\nAccordion.displayName = ACCORDION_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionValueContextValue = {\n  value: string[];\n  onItemOpen(value: string): void;\n  onItemClose(value: string): void;\n};\n\nconst [AccordionValueProvider, useAccordionValueContext] =\n  createAccordionContext<AccordionValueContextValue>(ACCORDION_NAME);\n\nconst [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n  ACCORDION_NAME,\n  { collapsible: false }\n);\n\ntype AccordionImplSingleElement = AccordionImplElement;\ninterface AccordionImplSingleProps extends AccordionImplProps {\n  /**\n   * The controlled stateful value of the accordion item whose content is expanded.\n   */\n  value?: string;\n  /**\n   * The value of the item whose content is expanded when the accordion is initially rendered. Use\n   * `defaultValue` if you do not need to control the state of an accordion.\n   */\n  defaultValue?: string;\n  /**\n   * The callback that fires when the state of the accordion changes.\n   */\n  onValueChange?(value: string): void;\n  /**\n   * Whether an accordion item can be collapsed after it has been opened.\n   * @default false\n   */\n  collapsible?: boolean;\n}\n\nconst AccordionImplSingle = React.forwardRef<AccordionImplSingleElement, AccordionImplSingleProps>(\n  (props: ScopedProps<AccordionImplSingleProps>, forwardedRef) => {\n    const {\n      value: valueProp,\n      defaultValue,\n      onValueChange = () => {},\n      collapsible = false,\n      ...accordionSingleProps\n    } = props;\n\n    const [value, setValue] = useControllableState({\n      prop: valueProp,\n      defaultProp: defaultValue,\n      onChange: onValueChange,\n    });\n\n    return (\n      <AccordionValueProvider\n        scope={props.__scopeAccordion}\n        value={value ? [value] : []}\n        onItemOpen={setValue}\n        onItemClose={React.useCallback(() => collapsible && setValue(''), [collapsible, setValue])}\n      >\n        <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={collapsible}>\n          <AccordionImpl {...accordionSingleProps} ref={forwardedRef} />\n        </AccordionCollapsibleProvider>\n      </AccordionValueProvider>\n    );\n  }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplMultipleElement = AccordionImplElement;\ninterface AccordionImplMultipleProps extends AccordionImplProps {\n  /**\n   * The controlled stateful value of the accordion items whose contents are expanded.\n   */\n  value?: string[];\n  /**\n   * The value of the items whose contents are expanded when the accordion is initially rendered. Use\n   * `defaultValue` if you do not need to control the state of an accordion.\n   */\n  defaultValue?: string[];\n  /**\n   * The callback that fires when the state of the accordion changes.\n   */\n  onValueChange?(value: string[]): void;\n}\n\nconst AccordionImplMultiple = React.forwardRef<\n  AccordionImplMultipleElement,\n  AccordionImplMultipleProps\n>((props: ScopedProps<AccordionImplMultipleProps>, forwardedRef) => {\n  const {\n    value: valueProp,\n    defaultValue,\n    onValueChange = () => {},\n    ...accordionMultipleProps\n  } = props;\n\n  const [value = [], setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n  });\n\n  const handleItemOpen = React.useCallback(\n    (itemValue: string) => setValue((prevValue = []) => [...prevValue, itemValue]),\n    [setValue]\n  );\n\n  const handleItemClose = React.useCallback(\n    (itemValue: string) =>\n      setValue((prevValue = []) => prevValue.filter((value) => value !== itemValue)),\n    [setValue]\n  );\n\n  return (\n    <AccordionValueProvider\n      scope={props.__scopeAccordion}\n      value={value}\n      onItemOpen={handleItemOpen}\n      onItemClose={handleItemClose}\n    >\n      <AccordionCollapsibleProvider scope={props.__scopeAccordion} collapsible={true}>\n        <AccordionImpl {...accordionMultipleProps} ref={forwardedRef} />\n      </AccordionCollapsibleProvider>\n    </AccordionValueProvider>\n  );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype AccordionImplContextValue = {\n  disabled?: boolean;\n  direction: AccordionImplProps['dir'];\n  orientation: AccordionImplProps['orientation'];\n};\n\nconst [AccordionImplProvider, useAccordionContext] =\n  createAccordionContext<AccordionImplContextValue>(ACCORDION_NAME);\n\ntype AccordionImplElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface AccordionImplProps extends PrimitiveDivProps {\n  /**\n   * Whether or not an accordion is disabled from user interaction.\n   *\n   * @defaultValue false\n   */\n  disabled?: boolean;\n  /**\n   * The layout in which the Accordion operates.\n   * @default vertical\n   */\n  orientation?: React.AriaAttributes['aria-orientation'];\n  /**\n   * The language read direction.\n   */\n  dir?: Direction;\n}\n\nconst AccordionImpl = React.forwardRef<AccordionImplElement, AccordionImplProps>(\n  (props: ScopedProps<AccordionImplProps>, forwardedRef) => {\n    const { __scopeAccordion, disabled, dir, orientation = 'vertical', ...accordionProps } = props;\n    const accordionRef = React.useRef<AccordionImplElement>(null);\n    const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n    const getItems = useCollection(__scopeAccordion);\n    const direction = useDirection(dir);\n    const isDirectionLTR = direction === 'ltr';\n\n    const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n      if (!ACCORDION_KEYS.includes(event.key)) return;\n      const target = event.target as HTMLElement;\n      const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n      const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n      const triggerCount = triggerCollection.length;\n\n      if (triggerIndex === -1) return;\n\n      // Prevents page scroll while user is navigating\n      event.preventDefault();\n\n      let nextIndex = triggerIndex;\n      const homeIndex = 0;\n      const endIndex = triggerCount - 1;\n\n      const moveNext = () => {\n        nextIndex = triggerIndex + 1;\n        if (nextIndex > endIndex) {\n          nextIndex = homeIndex;\n        }\n      };\n\n      const movePrev = () => {\n        nextIndex = triggerIndex - 1;\n        if (nextIndex < homeIndex) {\n          nextIndex = endIndex;\n        }\n      };\n\n      switch (event.key) {\n        case 'Home':\n          nextIndex = homeIndex;\n          break;\n        case 'End':\n          nextIndex = endIndex;\n          break;\n        case 'ArrowRight':\n          if (orientation === 'horizontal') {\n            if (isDirectionLTR) {\n              moveNext();\n            } else {\n              movePrev();\n            }\n          }\n          break;\n        case 'ArrowDown':\n          if (orientation === 'vertical') {\n            moveNext();\n          }\n          break;\n        case 'ArrowLeft':\n          if (orientation === 'horizontal') {\n            if (isDirectionLTR) {\n              movePrev();\n            } else {\n              moveNext();\n            }\n          }\n          break;\n        case 'ArrowUp':\n          if (orientation === 'vertical') {\n            movePrev();\n          }\n          break;\n      }\n\n      const clampedIndex = nextIndex % triggerCount;\n      triggerCollection[clampedIndex].ref.current?.focus();\n    });\n\n    return (\n      <AccordionImplProvider\n        scope={__scopeAccordion}\n        disabled={disabled}\n        direction={dir}\n        orientation={orientation}\n      >\n        <Collection.Slot scope={__scopeAccordion}>\n          <Primitive.div\n            {...accordionProps}\n            data-orientation={orientation}\n            ref={composedRefs}\n            onKeyDown={disabled ? undefined : handleKeyDown}\n          />\n        </Collection.Slot>\n      </AccordionImplProvider>\n    );\n  }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'AccordionItem';\n\ntype AccordionItemContextValue = { open?: boolean; disabled?: boolean; triggerId: string };\nconst [AccordionItemProvider, useAccordionItemContext] =\n  createAccordionContext<AccordionItemContextValue>(ITEM_NAME);\n\ntype AccordionItemElement = React.ElementRef<typeof CollapsiblePrimitive.Root>;\ntype CollapsibleProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root>;\ninterface AccordionItemProps\n  extends Omit<CollapsibleProps, 'open' | 'defaultOpen' | 'onOpenChange'> {\n  /**\n   * Whether or not an accordion item is disabled from user interaction.\n   *\n   * @defaultValue false\n   */\n  disabled?: boolean;\n  /**\n   * A string value for the accordion item. All items within an accordion should use a unique value.\n   */\n  value: string;\n}\n\n/**\n * `AccordionItem` contains all of the parts of a collapsible section inside of an `Accordion`.\n */\nconst AccordionItem = React.forwardRef<AccordionItemElement, AccordionItemProps>(\n  (props: ScopedProps<AccordionItemProps>, forwardedRef) => {\n    const { __scopeAccordion, value, ...accordionItemProps } = props;\n    const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n    const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    const triggerId = useId();\n    const open = (value && valueContext.value.includes(value)) || false;\n    const disabled = accordionContext.disabled || props.disabled;\n\n    return (\n      <AccordionItemProvider\n        scope={__scopeAccordion}\n        open={open}\n        disabled={disabled}\n        triggerId={triggerId}\n      >\n        <CollapsiblePrimitive.Root\n          data-orientation={accordionContext.orientation}\n          data-state={getState(open)}\n          {...collapsibleScope}\n          {...accordionItemProps}\n          ref={forwardedRef}\n          disabled={disabled}\n          open={open}\n          onOpenChange={(open) => {\n            if (open) {\n              valueContext.onItemOpen(value);\n            } else {\n              valueContext.onItemClose(value);\n            }\n          }}\n        />\n      </AccordionItemProvider>\n    );\n  }\n);\n\nAccordionItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst HEADER_NAME = 'AccordionHeader';\n\ntype AccordionHeaderElement = React.ElementRef<typeof Primitive.h3>;\ntype PrimitiveHeading3Props = React.ComponentPropsWithoutRef<typeof Primitive.h3>;\ninterface AccordionHeaderProps extends PrimitiveHeading3Props {}\n\n/**\n * `AccordionHeader` contains the content for the parts of an `AccordionItem` that will be visible\n * whether or not its content is collapsed.\n */\nconst AccordionHeader = React.forwardRef<AccordionHeaderElement, AccordionHeaderProps>(\n  (props: ScopedProps<AccordionHeaderProps>, forwardedRef) => {\n    const { __scopeAccordion, ...headerProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n    return (\n      <Primitive.h3\n        data-orientation={accordionContext.orientation}\n        data-state={getState(itemContext.open)}\n        data-disabled={itemContext.disabled ? '' : undefined}\n        {...headerProps}\n        ref={forwardedRef}\n      />\n    );\n  }\n);\n\nAccordionHeader.displayName = HEADER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'AccordionTrigger';\n\ntype AccordionTriggerElement = React.ElementRef<typeof CollapsiblePrimitive.Trigger>;\ntype CollapsibleTriggerProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>;\ninterface AccordionTriggerProps extends CollapsibleTriggerProps {}\n\n/**\n * `AccordionTrigger` is the trigger that toggles the collapsed state of an `AccordionItem`. It\n * should always be nested inside of an `AccordionHeader`.\n */\nconst AccordionTrigger = React.forwardRef<AccordionTriggerElement, AccordionTriggerProps>(\n  (props: ScopedProps<AccordionTriggerProps>, forwardedRef) => {\n    const { __scopeAccordion, ...triggerProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n    const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    return (\n      <Collection.ItemSlot scope={__scopeAccordion}>\n        <CollapsiblePrimitive.Trigger\n          aria-disabled={(itemContext.open && !collapsibleContext.collapsible) || undefined}\n          data-orientation={accordionContext.orientation}\n          id={itemContext.triggerId}\n          {...collapsibleScope}\n          {...triggerProps}\n          ref={forwardedRef}\n        />\n      </Collection.ItemSlot>\n    );\n  }\n);\n\nAccordionTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AccordionContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AccordionContent';\n\ntype AccordionContentElement = React.ElementRef<typeof CollapsiblePrimitive.Content>;\ntype CollapsibleContentProps = React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>;\ninterface AccordionContentProps extends CollapsibleContentProps {}\n\n/**\n * `AccordionContent` contains the collapsible content for an `AccordionItem`.\n */\nconst AccordionContent = React.forwardRef<AccordionContentElement, AccordionContentProps>(\n  (props: ScopedProps<AccordionContentProps>, forwardedRef) => {\n    const { __scopeAccordion, ...contentProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    return (\n      <CollapsiblePrimitive.Content\n        role=\"region\"\n        aria-labelledby={itemContext.triggerId}\n        data-orientation={accordionContext.orientation}\n        {...collapsibleScope}\n        {...contentProps}\n        ref={forwardedRef}\n        style={{\n          ['--radix-accordion-content-height' as any]: 'var(--radix-collapsible-content-height)',\n          ['--radix-accordion-content-width' as any]: 'var(--radix-collapsible-content-width)',\n          ...props.style,\n        }}\n      />\n    );\n  }\n);\n\nAccordionContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n  return open ? 'open' : 'closed';\n}\n\nconst Root = Accordion;\nconst Item = AccordionItem;\nconst Header = AccordionHeader;\nconst Trigger = AccordionTrigger;\nconst Content = AccordionContent;\n\nexport {\n  createAccordionScope,\n  //\n  Accordion,\n  AccordionItem,\n  AccordionHeader,\n  AccordionTrigger,\n  AccordionContent,\n  //\n  Root,\n  Item,\n  Header,\n  Trigger,\n  Content,\n};\nexport type {\n  AccordionSingleProps,\n  AccordionMultipleProps,\n  AccordionItemProps,\n  AccordionHeaderProps,\n  AccordionTriggerProps,\n  AccordionContentProps,\n};\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n  string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n  const camelCase = string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n    p2 ? p2.toUpperCase() : p1.toLowerCase(),\n  );\n\n  return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n  classes\n    .filter((className, index, array) => {\n      return Boolean(className) && array.indexOf(className) === index;\n    })\n    .join(' ');\n","export default {\n  xmlns: 'http://www.w3.org/2000/svg',\n  width: 24,\n  height: 24,\n  viewBox: '0 0 24 24',\n  fill: 'none',\n  stroke: 'currentColor',\n  strokeWidth: 2,\n  strokeLinecap: 'round',\n  strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n  iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n  (\n    {\n      color = 'currentColor',\n      size = 24,\n      strokeWidth = 2,\n      absoluteStrokeWidth,\n      className = '',\n      children,\n      iconNode,\n      ...rest\n    },\n    ref,\n  ) => {\n    return createElement(\n      'svg',\n      {\n        ref,\n        ...defaultAttributes,\n        width: size,\n        height: size,\n        stroke: color,\n        strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n        className: mergeClasses('lucide', className),\n        ...rest,\n      },\n      [\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...(Array.isArray(children) ? children : [children]),\n      ],\n    );\n  },\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n  const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n    createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n      ...props,\n    }),\n  );\n\n  Component.displayName = `${iconName}`;\n\n  return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('ChevronDown', [\n  ['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }],\n]);\n\nexport default ChevronDown;\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import {\n    ClassGroup,\n    ClassValidator,\n    Config,\n    GenericClassGroupIds,\n    GenericConfig,\n    GenericThemeGroupIds,\n    ThemeGetter,\n    ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n    nextPart: Map<string, ClassPartObject>\n    validators: ClassValidatorObject[]\n    classGroupId?: GenericClassGroupIds\n}\n\ninterface ClassValidatorObject {\n    classGroupId: GenericClassGroupIds\n    validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport function createClassUtils(config: GenericConfig) {\n    const classMap = createClassMap(config)\n    const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n    function getClassGroupId(className: string) {\n        const classParts = className.split(CLASS_PART_SEPARATOR)\n\n        // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n        if (classParts[0] === '' && classParts.length !== 1) {\n            classParts.shift()\n        }\n\n        return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n    }\n\n    function getConflictingClassGroupIds(\n        classGroupId: GenericClassGroupIds,\n        hasPostfixModifier: boolean,\n    ) {\n        const conflicts = conflictingClassGroups[classGroupId] || []\n\n        if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n            return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n        }\n\n        return conflicts\n    }\n\n    return {\n        getClassGroupId,\n        getConflictingClassGroupIds,\n    }\n}\n\nfunction getGroupRecursive(\n    classParts: string[],\n    classPartObject: ClassPartObject,\n): GenericClassGroupIds | undefined {\n    if (classParts.length === 0) {\n        return classPartObject.classGroupId\n    }\n\n    const currentClassPart = classParts[0]!\n    const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n    const classGroupFromNextClassPart = nextClassPartObject\n        ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n        : undefined\n\n    if (classGroupFromNextClassPart) {\n        return classGroupFromNextClassPart\n    }\n\n    if (classPartObject.validators.length === 0) {\n        return undefined\n    }\n\n    const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n    return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nfunction getGroupIdForArbitraryProperty(className: string) {\n    if (arbitraryPropertyRegex.test(className)) {\n        const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n        const property = arbitraryPropertyClassName?.substring(\n            0,\n            arbitraryPropertyClassName.indexOf(':'),\n        )\n\n        if (property) {\n            // I use two dots here because one dot is used as prefix for class groups in plugins\n            return 'arbitrary..' + property\n        }\n    }\n}\n\n/**\n * Exported for testing only\n */\nexport function createClassMap(config: Config<GenericClassGroupIds, GenericThemeGroupIds>) {\n    const { theme, prefix } = config\n    const classMap: ClassPartObject = {\n        nextPart: new Map<string, ClassPartObject>(),\n        validators: [],\n    }\n\n    const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n        Object.entries(config.classGroups),\n        prefix,\n    )\n\n    prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n        processClassesRecursively(classGroup, classMap, classGroupId, theme)\n    })\n\n    return classMap\n}\n\nfunction processClassesRecursively(\n    classGroup: ClassGroup<GenericThemeGroupIds>,\n    classPartObject: ClassPartObject,\n    classGroupId: GenericClassGroupIds,\n    theme: ThemeObject<GenericThemeGroupIds>,\n) {\n    classGroup.forEach((classDefinition) => {\n        if (typeof classDefinition === 'string') {\n            const classPartObjectToEdit =\n                classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n            classPartObjectToEdit.classGroupId = classGroupId\n            return\n        }\n\n        if (typeof classDefinition === 'function') {\n            if (isThemeGetter(classDefinition)) {\n                processClassesRecursively(\n                    classDefinition(theme),\n                    classPartObject,\n                    classGroupId,\n                    theme,\n                )\n                return\n            }\n\n            classPartObject.validators.push({\n                validator: classDefinition,\n                classGroupId,\n            })\n\n            return\n        }\n\n        Object.entries(classDefinition).forEach(([key, classGroup]) => {\n            processClassesRecursively(\n                classGroup,\n                getPart(classPartObject, key),\n                classGroupId,\n                theme,\n            )\n        })\n    })\n}\n\nfunction getPart(classPartObject: ClassPartObject, path: string) {\n    let currentClassPartObject = classPartObject\n\n    path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n        if (!currentClassPartObject.nextPart.has(pathPart)) {\n            currentClassPartObject.nextPart.set(pathPart, {\n                nextPart: new Map(),\n                validators: [],\n            })\n        }\n\n        currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n    })\n\n    return currentClassPartObject\n}\n\nfunction isThemeGetter(func: ClassValidator | ThemeGetter): func is ThemeGetter {\n    return (func as ThemeGetter).isThemeGetter\n}\n\nfunction getPrefixedClassGroupEntries(\n    classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]>,\n    prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<GenericThemeGroupIds>]> {\n    if (!prefix) {\n        return classGroupEntries\n    }\n\n    return classGroupEntries.map(([classGroupId, classGroup]) => {\n        const prefixedClassGroup = classGroup.map((classDefinition) => {\n            if (typeof classDefinition === 'string') {\n                return prefix + classDefinition\n            }\n\n            if (typeof classDefinition === 'object') {\n                return Object.fromEntries(\n                    Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n                )\n            }\n\n            return classDefinition\n        })\n\n        return [classGroupId, prefixedClassGroup]\n    })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n    get(key: Key): Value | undefined\n    set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport function createLruCache<Key, Value>(maxCacheSize: number): LruCache<Key, Value> {\n    if (maxCacheSize < 1) {\n        return {\n            get: () => undefined,\n            set: () => {},\n        }\n    }\n\n    let cacheSize = 0\n    let cache = new Map<Key, Value>()\n    let previousCache = new Map<Key, Value>()\n\n    function update(key: Key, value: Value) {\n        cache.set(key, value)\n        cacheSize++\n\n        if (cacheSize > maxCacheSize) {\n            cacheSize = 0\n            previousCache = cache\n            cache = new Map()\n        }\n    }\n\n    return {\n        get(key) {\n            let value = cache.get(key)\n\n            if (value !== undefined) {\n                return value\n            }\n            if ((value = previousCache.get(key)) !== undefined) {\n                update(key, value)\n                return value\n            }\n        },\n        set(key, value) {\n            if (cache.has(key)) {\n                cache.set(key, value)\n            } else {\n                update(key, value)\n            }\n        },\n    }\n}\n","import { GenericConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport function createSplitModifiers(config: GenericConfig) {\n    const separator = config.separator\n    const isSeparatorSingleCharacter = separator.length === 1\n    const firstSeparatorCharacter = separator[0]\n    const separatorLength = separator.length\n\n    // splitModifiers inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n    return function splitModifiers(className: string) {\n        const modifiers = []\n\n        let bracketDepth = 0\n        let modifierStart = 0\n        let postfixModifierPosition: number | undefined\n\n        for (let index = 0; index < className.length; index++) {\n            let currentCharacter = className[index]\n\n            if (bracketDepth === 0) {\n                if (\n                    currentCharacter === firstSeparatorCharacter &&\n                    (isSeparatorSingleCharacter ||\n                        className.slice(index, index + separatorLength) === separator)\n                ) {\n                    modifiers.push(className.slice(modifierStart, index))\n                    modifierStart = index + separatorLength\n                    continue\n                }\n\n                if (currentCharacter === '/') {\n                    postfixModifierPosition = index\n                    continue\n                }\n            }\n\n            if (currentCharacter === '[') {\n                bracketDepth++\n            } else if (currentCharacter === ']') {\n                bracketDepth--\n            }\n        }\n\n        const baseClassNameWithImportantModifier =\n            modifiers.length === 0 ? className : className.substring(modifierStart)\n        const hasImportantModifier =\n            baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n        const baseClassName = hasImportantModifier\n            ? baseClassNameWithImportantModifier.substring(1)\n            : baseClassNameWithImportantModifier\n\n        const maybePostfixModifierPosition =\n            postfixModifierPosition && postfixModifierPosition > modifierStart\n                ? postfixModifierPosition - modifierStart\n                : undefined\n\n        return {\n            modifiers,\n            hasImportantModifier,\n            baseClassName,\n            maybePostfixModifierPosition,\n        }\n    }\n}\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport function sortModifiers(modifiers: string[]) {\n    if (modifiers.length <= 1) {\n        return modifiers\n    }\n\n    const sortedModifiers: string[] = []\n    let unsortedModifiers: string[] = []\n\n    modifiers.forEach((modifier) => {\n        const isArbitraryVariant = modifier[0] === '['\n\n        if (isArbitraryVariant) {\n            sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n            unsortedModifiers = []\n        } else {\n            unsortedModifiers.push(modifier)\n        }\n    })\n\n    sortedModifiers.push(...unsortedModifiers.sort())\n\n    return sortedModifiers\n}\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './modifier-utils'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport function mergeClassList(classList: string, configUtils: ConfigUtils) {\n    const { splitModifiers, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n    /**\n     * Set of classGroupIds in following format:\n     * `{importantModifier}{variantModifiers}{classGroupId}`\n     * @example 'float'\n     * @example 'hover:focus:bg-color'\n     * @example 'md:!pr'\n     */\n    const classGroupsInConflict = new Set<string>()\n\n    return (\n        classList\n            .trim()\n            .split(SPLIT_CLASSES_REGEX)\n            .map((originalClassName) => {\n                const {\n                    modifiers,\n                    hasImportantModifier,\n                    baseClassName,\n                    maybePostfixModifierPosition,\n                } = splitModifiers(originalClassName)\n\n                let classGroupId = getClassGroupId(\n                    maybePostfixModifierPosition\n                        ? baseClassName.substring(0, maybePostfixModifierPosition)\n                        : baseClassName,\n                )\n\n                let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n\n                if (!classGroupId) {\n                    if (!maybePostfixModifierPosition) {\n                        return {\n                            isTailwindClass: false as const,\n                            originalClassName,\n                        }\n                    }\n\n                    classGroupId = getClassGroupId(baseClassName)\n\n                    if (!classGroupId) {\n                        return {\n                            isTailwindClass: false as const,\n                            originalClassName,\n                        }\n                    }\n\n                    hasPostfixModifier = false\n                }\n\n                const variantModifier = sortModifiers(modifiers).join(':')\n\n                const modifierId = hasImportantModifier\n                    ? variantModifier + IMPORTANT_MODIFIER\n                    : variantModifier\n\n                return {\n                    isTailwindClass: true as const,\n                    modifierId,\n                    classGroupId,\n                    originalClassName,\n                    hasPostfixModifier,\n                }\n            })\n            .reverse()\n            // Last class in conflict wins, so we need to filter conflicting classes in reverse order.\n            .filter((parsed) => {\n                if (!parsed.isTailwindClass) {\n                    return true\n                }\n\n                const { modifierId, classGroupId, hasPostfixModifier } = parsed\n\n                const classId = modifierId + classGroupId\n\n                if (classGroupsInConflict.has(classId)) {\n                    return false\n                }\n\n                classGroupsInConflict.add(classId)\n\n                getConflictingClassGroupIds(classGroupId, hasPostfixModifier).forEach((group) =>\n                    classGroupsInConflict.add(modifierId + group),\n                )\n\n                return true\n            })\n            .reverse()\n            .map((parsed) => parsed.originalClassName)\n            .join(' ')\n    )\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n    let index = 0\n    let argument: ClassNameValue\n    let resolvedValue: string\n    let string = ''\n\n    while (index < arguments.length) {\n        if ((argument = arguments[index++])) {\n            if ((resolvedValue = toValue(argument))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n    return string\n}\n\nfunction toValue(mix: ClassNameArray | string) {\n    if (typeof mix === 'string') {\n        return mix\n    }\n\n    let resolvedValue: string\n    let string = ''\n\n    for (let k = 0; k < mix.length; k++) {\n        if (mix[k]) {\n            if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n                string && (string += ' ')\n                string += resolvedValue\n            }\n        }\n    }\n\n    return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { GenericConfig } from './types'\n\ntype CreateConfigFirst = () => GenericConfig\ntype CreateConfigSubsequent = (config: GenericConfig) => GenericConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n    createConfigFirst: CreateConfigFirst,\n    ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n    let configUtils: ConfigUtils\n    let cacheGet: ConfigUtils['cache']['get']\n    let cacheSet: ConfigUtils['cache']['set']\n    let functionToCall = initTailwindMerge\n\n    function initTailwindMerge(classList: string) {\n        const config = createConfigRest.reduce(\n            (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n            createConfigFirst() as GenericConfig,\n        )\n\n        configUtils = createConfigUtils(config)\n        cacheGet = configUtils.cache.get\n        cacheSet = configUtils.cache.set\n        functionToCall = tailwindMerge\n\n        return tailwindMerge(classList)\n    }\n\n    function tailwindMerge(classList: string) {\n        const cachedResult = cacheGet(classList)\n\n        if (cachedResult) {\n            return cachedResult\n        }\n\n        const result = mergeClassList(classList, configUtils)\n        cacheSet(classList, result)\n\n        return result\n    }\n\n    return function callTailwindMerge() {\n        return functionToCall(twJoin.apply(null, arguments as any))\n    }\n}\n","import { createClassUtils } from './class-utils'\nimport { createLruCache } from './lru-cache'\nimport { createSplitModifiers } from './modifier-utils'\nimport { GenericConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createConfigUtils(config: GenericConfig) {\n    return {\n        cache: createLruCache<string, string>(config.cacheSize),\n        splitModifiers: createSplitModifiers(config),\n        ...createClassUtils(config),\n    }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport function fromTheme<\n    AdditionalThemeGroupIds extends string = never,\n    DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter {\n    const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n        theme[key] || []\n\n    themeGetter.isThemeGetter = true as const\n\n    return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n    /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n    /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport function isLength(value: string) {\n    return isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n}\n\nexport function isArbitraryLength(value: string) {\n    return getIsArbitraryValue(value, 'length', isLengthOnly)\n}\n\nexport function isNumber(value: string) {\n    return Boolean(value) && !Number.isNaN(Number(value))\n}\n\nexport function isArbitraryNumber(value: string) {\n    return getIsArbitraryValue(value, 'number', isNumber)\n}\n\nexport function isInteger(value: string) {\n    return Boolean(value) && Number.isInteger(Number(value))\n}\n\nexport function isPercent(value: string) {\n    return value.endsWith('%') && isNumber(value.slice(0, -1))\n}\n\nexport function isArbitraryValue(value: string) {\n    return arbitraryValueRegex.test(value)\n}\n\nexport function isTshirtSize(value: string) {\n    return tshirtUnitRegex.test(value)\n}\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport function isArbitrarySize(value: string) {\n    return getIsArbitraryValue(value, sizeLabels, isNever)\n}\n\nexport function isArbitraryPosition(value: string) {\n    return getIsArbitraryValue(value, 'position', isNever)\n}\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport function isArbitraryImage(value: string) {\n    return getIsArbitraryValue(value, imageLabels, isImage)\n}\n\nexport function isArbitraryShadow(value: string) {\n    return getIsArbitraryValue(value, '', isShadow)\n}\n\nexport function isAny() {\n    return true\n}\n\nfunction getIsArbitraryValue(\n    value: string,\n    label: string | Set<string>,\n    testValue: (value: string) => boolean,\n) {\n    const result = arbitraryValueRegex.exec(value)\n\n    if (result) {\n        if (result[1]) {\n            return typeof label === 'string' ? result[1] === label : label.has(result[1])\n        }\n\n        return testValue(result[2]!)\n    }\n\n    return false\n}\n\nfunction isLengthOnly(value: string) {\n    // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n    // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n    // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n    return lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n}\n\nfunction isNever() {\n    return false\n}\n\nfunction isShadow(value: string) {\n    return shadowRegex.test(value)\n}\n\nfunction isImage(value: string) {\n    return imageRegex.test(value)\n}\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n    isAny,\n    isArbitraryImage,\n    isArbitraryLength,\n    isArbitraryNumber,\n    isArbitraryPosition,\n    isArbitraryShadow,\n    isArbitrarySize,\n    isArbitraryValue,\n    isInteger,\n    isLength,\n    isNumber,\n    isPercent,\n    isTshirtSize,\n} from './validators'\n\nexport function getDefaultConfig() {\n    const colors = fromTheme('colors')\n    const spacing = fromTheme('spacing')\n    const blur = fromTheme('blur')\n    const brightness = fromTheme('brightness')\n    const borderColor = fromTheme('borderColor')\n    const borderRadius = fromTheme('borderRadius')\n    const borderSpacing = fromTheme('borderSpacing')\n    const borderWidth = fromTheme('borderWidth')\n    const contrast = fromTheme('contrast')\n    const grayscale = fromTheme('grayscale')\n    const hueRotate = fromTheme('hueRotate')\n    const invert = fromTheme('invert')\n    const gap = fromTheme('gap')\n    const gradientColorStops = fromTheme('gradientColorStops')\n    const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n    const inset = fromTheme('inset')\n    const margin = fromTheme('margin')\n    const opacity = fromTheme('opacity')\n    const padding = fromTheme('padding')\n    const saturate = fromTheme('saturate')\n    const scale = fromTheme('scale')\n    const sepia = fromTheme('sepia')\n    const skew = fromTheme('skew')\n    const space = fromTheme('space')\n    const translate = fromTheme('translate')\n\n    const getOverscroll = () => ['auto', 'contain', 'none'] as const\n    const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n    const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n    const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n    const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n    const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n    const getPositions = () =>\n        [\n            'bottom',\n            'center',\n            'left',\n            'left-bottom',\n            'left-top',\n            'right',\n            'right-bottom',\n            'right-top',\n            'top',\n        ] as const\n    const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n    const getBlendModes = () =>\n        [\n            'normal',\n            'multiply',\n            'screen',\n            'overlay',\n            'darken',\n            'lighten',\n            'color-dodge',\n            'color-burn',\n            'hard-light',\n            'soft-light',\n            'difference',\n            'exclusion',\n            'hue',\n            'saturation',\n            'color',\n            'luminosity',\n        ] as const\n    const getAlign = () =>\n        ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n    const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n    const getBreaks = () =>\n        ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n    const getNumber = () => [isNumber, isArbitraryNumber]\n    const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n    return {\n        cacheSize: 500,\n        separator: ':',\n        theme: {\n            colors: [isAny],\n            spacing: [isLength, isArbitraryLength],\n            blur: ['none', '', isTshirtSize, isArbitraryValue],\n            brightness: getNumber(),\n            borderColor: [colors],\n            borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n            borderSpacing: getSpacingWithArbitrary(),\n            borderWidth: getLengthWithEmptyAndArbitrary(),\n            contrast: getNumber(),\n            grayscale: getZeroAndEmpty(),\n            hueRotate: getNumberAndArbitrary(),\n            invert: getZeroAndEmpty(),\n            gap: getSpacingWithArbitrary(),\n            gradientColorStops: [colors],\n            gradientColorStopPositions: [isPercent, isArbitraryLength],\n            inset: getSpacingWithAutoAndArbitrary(),\n            margin: getSpacingWithAutoAndArbitrary(),\n            opacity: getNumber(),\n            padding: getSpacingWithArbitrary(),\n            saturate: getNumber(),\n            scale: getNumber(),\n            sepia: getZeroAndEmpty(),\n            skew: getNumberAndArbitrary(),\n            space: getSpacingWithArbitrary(),\n            translate: getSpacingWithArbitrary(),\n        },\n        classGroups: {\n            // Layout\n            /**\n             * Aspect Ratio\n             * @see https://tailwindcss.com/docs/aspect-ratio\n             */\n            aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n            /**\n             * Container\n             * @see https://tailwindcss.com/docs/container\n             */\n            container: ['container'],\n            /**\n             * Columns\n             * @see https://tailwindcss.com/docs/columns\n             */\n            columns: [{ columns: [isTshirtSize] }],\n            /**\n             * Break After\n             * @see https://tailwindcss.com/docs/break-after\n             */\n            'break-after': [{ 'break-after': getBreaks() }],\n            /**\n             * Break Before\n             * @see https://tailwindcss.com/docs/break-before\n             */\n            'break-before': [{ 'break-before': getBreaks() }],\n            /**\n             * Break Inside\n             * @see https://tailwindcss.com/docs/break-inside\n             */\n            'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n            /**\n             * Box Decoration Break\n             * @see https://tailwindcss.com/docs/box-decoration-break\n             */\n            'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n            /**\n             * Box Sizing\n             * @see https://tailwindcss.com/docs/box-sizing\n             */\n            box: [{ box: ['border', 'content'] }],\n            /**\n             * Display\n             * @see https://tailwindcss.com/docs/display\n             */\n            display: [\n                'block',\n                'inline-block',\n                'inline',\n                'flex',\n                'inline-flex',\n                'table',\n                'inline-table',\n                'table-caption',\n                'table-cell',\n                'table-column',\n                'table-column-group',\n                'table-footer-group',\n                'table-header-group',\n                'table-row-group',\n                'table-row',\n                'flow-root',\n                'grid',\n                'inline-grid',\n                'contents',\n                'list-item',\n                'hidden',\n            ],\n            /**\n             * Floats\n             * @see https://tailwindcss.com/docs/float\n             */\n            float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n            /**\n             * Clear\n             * @see https://tailwindcss.com/docs/clear\n             */\n            clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n            /**\n             * Isolation\n             * @see https://tailwindcss.com/docs/isolation\n             */\n            isolation: ['isolate', 'isolation-auto'],\n            /**\n             * Object Fit\n             * @see https://tailwindcss.com/docs/object-fit\n             */\n            'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n            /**\n             * Object Position\n             * @see https://tailwindcss.com/docs/object-position\n             */\n            'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n            /**\n             * Overflow\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            overflow: [{ overflow: getOverflow() }],\n            /**\n             * Overflow X\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-x': [{ 'overflow-x': getOverflow() }],\n            /**\n             * Overflow Y\n             * @see https://tailwindcss.com/docs/overflow\n             */\n            'overflow-y': [{ 'overflow-y': getOverflow() }],\n            /**\n             * Overscroll Behavior\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            overscroll: [{ overscroll: getOverscroll() }],\n            /**\n             * Overscroll Behavior X\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n            /**\n             * Overscroll Behavior Y\n             * @see https://tailwindcss.com/docs/overscroll-behavior\n             */\n            'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\n            /**\n             * Position\n             * @see https://tailwindcss.com/docs/position\n             */\n            position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n            /**\n             * Top / Right / Bottom / Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            inset: [{ inset: [inset] }],\n            /**\n             * Right / Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-x': [{ 'inset-x': [inset] }],\n            /**\n             * Top / Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            'inset-y': [{ 'inset-y': [inset] }],\n            /**\n             * Start\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            start: [{ start: [inset] }],\n            /**\n             * End\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            end: [{ end: [inset] }],\n            /**\n             * Top\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            top: [{ top: [inset] }],\n            /**\n             * Right\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            right: [{ right: [inset] }],\n            /**\n             * Bottom\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            bottom: [{ bottom: [inset] }],\n            /**\n             * Left\n             * @see https://tailwindcss.com/docs/top-right-bottom-left\n             */\n            left: [{ left: [inset] }],\n            /**\n             * Visibility\n             * @see https://tailwindcss.com/docs/visibility\n             */\n            visibility: ['visible', 'invisible', 'collapse'],\n            /**\n             * Z-Index\n             * @see https://tailwindcss.com/docs/z-index\n             */\n            z: [{ z: ['auto', isInteger, isArbitraryValue] }],\n            // Flexbox and Grid\n            /**\n             * Flex Basis\n             * @see https://tailwindcss.com/docs/flex-basis\n             */\n            basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n            /**\n             * Flex Direction\n             * @see https://tailwindcss.com/docs/flex-direction\n             */\n            'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n            /**\n             * Flex Wrap\n             * @see https://tailwindcss.com/docs/flex-wrap\n             */\n            'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n            /**\n             * Flex\n             * @see https://tailwindcss.com/docs/flex\n             */\n            flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n            /**\n             * Flex Grow\n             * @see https://tailwindcss.com/docs/flex-grow\n             */\n            grow: [{ grow: getZeroAndEmpty() }],\n            /**\n             * Flex Shrink\n             * @see https://tailwindcss.com/docs/flex-shrink\n             */\n            shrink: [{ shrink: getZeroAndEmpty() }],\n            /**\n             * Order\n             * @see https://tailwindcss.com/docs/order\n             */\n            order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n            /**\n             * Grid Template Columns\n             * @see https://tailwindcss.com/docs/grid-template-columns\n             */\n            'grid-cols': [{ 'grid-cols': [isAny] }],\n            /**\n             * Grid Column Start / End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start-end': [\n                {\n                    col: [\n                        'auto',\n                        { span: ['full', isInteger, isArbitraryValue] },\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Grid Column Start\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n            /**\n             * Grid Column End\n             * @see https://tailwindcss.com/docs/grid-column\n             */\n            'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n            /**\n             * Grid Template Rows\n             * @see https://tailwindcss.com/docs/grid-template-rows\n             */\n            'grid-rows': [{ 'grid-rows': [isAny] }],\n            /**\n             * Grid Row Start / End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start-end': [\n                { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n            ],\n            /**\n             * Grid Row Start\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n            /**\n             * Grid Row End\n             * @see https://tailwindcss.com/docs/grid-row\n             */\n            'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n            /**\n             * Grid Auto Flow\n             * @see https://tailwindcss.com/docs/grid-auto-flow\n             */\n            'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n            /**\n             * Grid Auto Columns\n             * @see https://tailwindcss.com/docs/grid-auto-columns\n             */\n            'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n            /**\n             * Grid Auto Rows\n             * @see https://tailwindcss.com/docs/grid-auto-rows\n             */\n            'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n            /**\n             * Gap\n             * @see https://tailwindcss.com/docs/gap\n             */\n            gap: [{ gap: [gap] }],\n            /**\n             * Gap X\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-x': [{ 'gap-x': [gap] }],\n            /**\n             * Gap Y\n             * @see https://tailwindcss.com/docs/gap\n             */\n            'gap-y': [{ 'gap-y': [gap] }],\n            /**\n             * Justify Content\n             * @see https://tailwindcss.com/docs/justify-content\n             */\n            'justify-content': [{ justify: ['normal', ...getAlign()] }],\n            /**\n             * Justify Items\n             * @see https://tailwindcss.com/docs/justify-items\n             */\n            'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n            /**\n             * Justify Self\n             * @see https://tailwindcss.com/docs/justify-self\n             */\n            'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n            /**\n             * Align Content\n             * @see https://tailwindcss.com/docs/align-content\n             */\n            'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n            /**\n             * Align Items\n             * @see https://tailwindcss.com/docs/align-items\n             */\n            'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n            /**\n             * Align Self\n             * @see https://tailwindcss.com/docs/align-self\n             */\n            'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n            /**\n             * Place Content\n             * @see https://tailwindcss.com/docs/place-content\n             */\n            'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n            /**\n             * Place Items\n             * @see https://tailwindcss.com/docs/place-items\n             */\n            'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n            /**\n             * Place Self\n             * @see https://tailwindcss.com/docs/place-self\n             */\n            'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n            // Spacing\n            /**\n             * Padding\n             * @see https://tailwindcss.com/docs/padding\n             */\n            p: [{ p: [padding] }],\n            /**\n             * Padding X\n             * @see https://tailwindcss.com/docs/padding\n             */\n            px: [{ px: [padding] }],\n            /**\n             * Padding Y\n             * @see https://tailwindcss.com/docs/padding\n             */\n            py: [{ py: [padding] }],\n            /**\n             * Padding Start\n             * @see https://tailwindcss.com/docs/padding\n             */\n            ps: [{ ps: [padding] }],\n            /**\n             * Padding End\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pe: [{ pe: [padding] }],\n            /**\n             * Padding Top\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pt: [{ pt: [padding] }],\n            /**\n             * Padding Right\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pr: [{ pr: [padding] }],\n            /**\n             * Padding Bottom\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pb: [{ pb: [padding] }],\n            /**\n             * Padding Left\n             * @see https://tailwindcss.com/docs/padding\n             */\n            pl: [{ pl: [padding] }],\n            /**\n             * Margin\n             * @see https://tailwindcss.com/docs/margin\n             */\n            m: [{ m: [margin] }],\n            /**\n             * Margin X\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mx: [{ mx: [margin] }],\n            /**\n             * Margin Y\n             * @see https://tailwindcss.com/docs/margin\n             */\n            my: [{ my: [margin] }],\n            /**\n             * Margin Start\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ms: [{ ms: [margin] }],\n            /**\n             * Margin End\n             * @see https://tailwindcss.com/docs/margin\n             */\n            me: [{ me: [margin] }],\n            /**\n             * Margin Top\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mt: [{ mt: [margin] }],\n            /**\n             * Margin Right\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mr: [{ mr: [margin] }],\n            /**\n             * Margin Bottom\n             * @see https://tailwindcss.com/docs/margin\n             */\n            mb: [{ mb: [margin] }],\n            /**\n             * Margin Left\n             * @see https://tailwindcss.com/docs/margin\n             */\n            ml: [{ ml: [margin] }],\n            /**\n             * Space Between X\n             * @see https://tailwindcss.com/docs/space\n             */\n            'space-x': [{ 'space-x': [space] }],\n            /**\n             * Space Between X Reverse\n             * @see https://tailwindcss.com/docs/space\n             */\n            'space-x-reverse': ['space-x-reverse'],\n            /**\n             * Space Between Y\n             * @see https://tailwindcss.com/docs/space\n             */\n            'space-y': [{ 'space-y': [space] }],\n            /**\n             * Space Between Y Reverse\n             * @see https://tailwindcss.com/docs/space\n             */\n            'space-y-reverse': ['space-y-reverse'],\n            // Sizing\n            /**\n             * Width\n             * @see https://tailwindcss.com/docs/width\n             */\n            w: [\n                {\n                    w: [\n                        'auto',\n                        'min',\n                        'max',\n                        'fit',\n                        'svw',\n                        'lvw',\n                        'dvw',\n                        isArbitraryValue,\n                        spacing,\n                    ],\n                },\n            ],\n            /**\n             * Min-Width\n             * @see https://tailwindcss.com/docs/min-width\n             */\n            'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n            /**\n             * Max-Width\n             * @see https://tailwindcss.com/docs/max-width\n             */\n            'max-w': [\n                {\n                    'max-w': [\n                        isArbitraryValue,\n                        spacing,\n                        'none',\n                        'full',\n                        'min',\n                        'max',\n                        'fit',\n                        'prose',\n                        { screen: [isTshirtSize] },\n                        isTshirtSize,\n                    ],\n                },\n            ],\n            /**\n             * Height\n             * @see https://tailwindcss.com/docs/height\n             */\n            h: [\n                {\n                    h: [\n                        isArbitraryValue,\n                        spacing,\n                        'auto',\n                        'min',\n                        'max',\n                        'fit',\n                        'svh',\n                        'lvh',\n                        'dvh',\n                    ],\n                },\n            ],\n            /**\n             * Min-Height\n             * @see https://tailwindcss.com/docs/min-height\n             */\n            'min-h': [\n                { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n            ],\n            /**\n             * Max-Height\n             * @see https://tailwindcss.com/docs/max-height\n             */\n            'max-h': [\n                { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n            ],\n            /**\n             * Size\n             * @see https://tailwindcss.com/docs/size\n             */\n            size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n            // Typography\n            /**\n             * Font Size\n             * @see https://tailwindcss.com/docs/font-size\n             */\n            'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\n            /**\n             * Font Smoothing\n             * @see https://tailwindcss.com/docs/font-smoothing\n             */\n            'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n            /**\n             * Font Style\n             * @see https://tailwindcss.com/docs/font-style\n             */\n            'font-style': ['italic', 'not-italic'],\n            /**\n             * Font Weight\n             * @see https://tailwindcss.com/docs/font-weight\n             */\n            'font-weight': [\n                {\n                    font: [\n                        'thin',\n                        'extralight',\n                        'light',\n                        'normal',\n                        'medium',\n                        'semibold',\n                        'bold',\n                        'extrabold',\n                        'black',\n                        isArbitraryNumber,\n                    ],\n                },\n            ],\n            /**\n             * Font Family\n             * @see https://tailwindcss.com/docs/font-family\n             */\n            'font-family': [{ font: [isAny] }],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-normal': ['normal-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-ordinal': ['ordinal'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-slashed-zero': ['slashed-zero'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n            /**\n             * Font Variant Numeric\n             * @see https://tailwindcss.com/docs/font-variant-numeric\n             */\n            'fvn-fraction': ['diagonal-fractions', 'stacked-fractons'],\n            /**\n             * Letter Spacing\n             * @see https://tailwindcss.com/docs/letter-spacing\n             */\n            tracking: [\n                {\n                    tracking: [\n                        'tighter',\n                        'tight',\n                        'normal',\n                        'wide',\n                        'wider',\n                        'widest',\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Line Clamp\n             * @see https://tailwindcss.com/docs/line-clamp\n             */\n            'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n            /**\n             * Line Height\n             * @see https://tailwindcss.com/docs/line-height\n             */\n            leading: [\n                {\n                    leading: [\n                        'none',\n                        'tight',\n                        'snug',\n                        'normal',\n                        'relaxed',\n                        'loose',\n                        isLength,\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * List Style Image\n             * @see https://tailwindcss.com/docs/list-style-image\n             */\n            'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n            /**\n             * List Style Type\n             * @see https://tailwindcss.com/docs/list-style-type\n             */\n            'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n            /**\n             * List Style Position\n             * @see https://tailwindcss.com/docs/list-style-position\n             */\n            'list-style-position': [{ list: ['inside', 'outside'] }],\n            /**\n             * Placeholder Color\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://tailwindcss.com/docs/placeholder-color\n             */\n            'placeholder-color': [{ placeholder: [colors] }],\n            /**\n             * Placeholder Opacity\n             * @see https://tailwindcss.com/docs/placeholder-opacity\n             */\n            'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n            /**\n             * Text Alignment\n             * @see https://tailwindcss.com/docs/text-align\n             */\n            'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n            /**\n             * Text Color\n             * @see https://tailwindcss.com/docs/text-color\n             */\n            'text-color': [{ text: [colors] }],\n            /**\n             * Text Opacity\n             * @see https://tailwindcss.com/docs/text-opacity\n             */\n            'text-opacity': [{ 'text-opacity': [opacity] }],\n            /**\n             * Text Decoration\n             * @see https://tailwindcss.com/docs/text-decoration\n             */\n            'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n            /**\n             * Text Decoration Style\n             * @see https://tailwindcss.com/docs/text-decoration-style\n             */\n            'text-decoration-style': [{ decoration: [...getLineStyles(), 'wavy'] }],\n            /**\n             * Text Decoration Thickness\n             * @see https://tailwindcss.com/docs/text-decoration-thickness\n             */\n            'text-decoration-thickness': [\n                { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n            ],\n            /**\n             * Text Underline Offset\n             * @see https://tailwindcss.com/docs/text-underline-offset\n             */\n            'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n            /**\n             * Text Decoration Color\n             * @see https://tailwindcss.com/docs/text-decoration-color\n             */\n            'text-decoration-color': [{ decoration: [colors] }],\n            /**\n             * Text Transform\n             * @see https://tailwindcss.com/docs/text-transform\n             */\n            'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n            /**\n             * Text Overflow\n             * @see https://tailwindcss.com/docs/text-overflow\n             */\n            'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n            /**\n             * Text Wrap\n             * @see https://tailwindcss.com/docs/text-wrap\n             */\n            'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n            /**\n             * Text Indent\n             * @see https://tailwindcss.com/docs/text-indent\n             */\n            indent: [{ indent: getSpacingWithArbitrary() }],\n            /**\n             * Vertical Alignment\n             * @see https://tailwindcss.com/docs/vertical-align\n             */\n            'vertical-align': [\n                {\n                    align: [\n                        'baseline',\n                        'top',\n                        'middle',\n                        'bottom',\n                        'text-top',\n                        'text-bottom',\n                        'sub',\n                        'super',\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Whitespace\n             * @see https://tailwindcss.com/docs/whitespace\n             */\n            whitespace: [\n                { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n            ],\n            /**\n             * Word Break\n             * @see https://tailwindcss.com/docs/word-break\n             */\n            break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n            /**\n             * Hyphens\n             * @see https://tailwindcss.com/docs/hyphens\n             */\n            hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n            /**\n             * Content\n             * @see https://tailwindcss.com/docs/content\n             */\n            content: [{ content: ['none', isArbitraryValue] }],\n            // Backgrounds\n            /**\n             * Background Attachment\n             * @see https://tailwindcss.com/docs/background-attachment\n             */\n            'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n            /**\n             * Background Clip\n             * @see https://tailwindcss.com/docs/background-clip\n             */\n            'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n            /**\n             * Background Opacity\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://tailwindcss.com/docs/background-opacity\n             */\n            'bg-opacity': [{ 'bg-opacity': [opacity] }],\n            /**\n             * Background Origin\n             * @see https://tailwindcss.com/docs/background-origin\n             */\n            'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n            /**\n             * Background Position\n             * @see https://tailwindcss.com/docs/background-position\n             */\n            'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n            /**\n             * Background Repeat\n             * @see https://tailwindcss.com/docs/background-repeat\n             */\n            'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n            /**\n             * Background Size\n             * @see https://tailwindcss.com/docs/background-size\n             */\n            'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n            /**\n             * Background Image\n             * @see https://tailwindcss.com/docs/background-image\n             */\n            'bg-image': [\n                {\n                    bg: [\n                        'none',\n                        { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n                        isArbitraryImage,\n                    ],\n                },\n            ],\n            /**\n             * Background Color\n             * @see https://tailwindcss.com/docs/background-color\n             */\n            'bg-color': [{ bg: [colors] }],\n            /**\n             * Gradient Color Stops From Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n            /**\n             * Gradient Color Stops Via Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n            /**\n             * Gradient Color Stops To Position\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n            /**\n             * Gradient Color Stops From\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-from': [{ from: [gradientColorStops] }],\n            /**\n             * Gradient Color Stops Via\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-via': [{ via: [gradientColorStops] }],\n            /**\n             * Gradient Color Stops To\n             * @see https://tailwindcss.com/docs/gradient-color-stops\n             */\n            'gradient-to': [{ to: [gradientColorStops] }],\n            // Borders\n            /**\n             * Border Radius\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            rounded: [{ rounded: [borderRadius] }],\n            /**\n             * Border Radius Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-s': [{ 'rounded-s': [borderRadius] }],\n            /**\n             * Border Radius End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-e': [{ 'rounded-e': [borderRadius] }],\n            /**\n             * Border Radius Top\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-t': [{ 'rounded-t': [borderRadius] }],\n            /**\n             * Border Radius Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-r': [{ 'rounded-r': [borderRadius] }],\n            /**\n             * Border Radius Bottom\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-b': [{ 'rounded-b': [borderRadius] }],\n            /**\n             * Border Radius Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-l': [{ 'rounded-l': [borderRadius] }],\n            /**\n             * Border Radius Start Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n            /**\n             * Border Radius Start End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-se': [{ 'rounded-se': [borderRadius] }],\n            /**\n             * Border Radius End End\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n            /**\n             * Border Radius End Start\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-es': [{ 'rounded-es': [borderRadius] }],\n            /**\n             * Border Radius Top Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n            /**\n             * Border Radius Top Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n            /**\n             * Border Radius Bottom Right\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-br': [{ 'rounded-br': [borderRadius] }],\n            /**\n             * Border Radius Bottom Left\n             * @see https://tailwindcss.com/docs/border-radius\n             */\n            'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n            /**\n             * Border Width\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w': [{ border: [borderWidth] }],\n            /**\n             * Border Width X\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-x': [{ 'border-x': [borderWidth] }],\n            /**\n             * Border Width Y\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-y': [{ 'border-y': [borderWidth] }],\n            /**\n             * Border Width Start\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-s': [{ 'border-s': [borderWidth] }],\n            /**\n             * Border Width End\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-e': [{ 'border-e': [borderWidth] }],\n            /**\n             * Border Width Top\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-t': [{ 'border-t': [borderWidth] }],\n            /**\n             * Border Width Right\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-r': [{ 'border-r': [borderWidth] }],\n            /**\n             * Border Width Bottom\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-b': [{ 'border-b': [borderWidth] }],\n            /**\n             * Border Width Left\n             * @see https://tailwindcss.com/docs/border-width\n             */\n            'border-w-l': [{ 'border-l': [borderWidth] }],\n            /**\n             * Border Opacity\n             * @see https://tailwindcss.com/docs/border-opacity\n             */\n            'border-opacity': [{ 'border-opacity': [opacity] }],\n            /**\n             * Border Style\n             * @see https://tailwindcss.com/docs/border-style\n             */\n            'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n            /**\n             * Divide Width X\n             * @see https://tailwindcss.com/docs/divide-width\n             */\n            'divide-x': [{ 'divide-x': [borderWidth] }],\n            /**\n             * Divide Width X Reverse\n             * @see https://tailwindcss.com/docs/divide-width\n             */\n            'divide-x-reverse': ['divide-x-reverse'],\n            /**\n             * Divide Width Y\n             * @see https://tailwindcss.com/docs/divide-width\n             */\n            'divide-y': [{ 'divide-y': [borderWidth] }],\n            /**\n             * Divide Width Y Reverse\n             * @see https://tailwindcss.com/docs/divide-width\n             */\n            'divide-y-reverse': ['divide-y-reverse'],\n            /**\n             * Divide Opacity\n             * @see https://tailwindcss.com/docs/divide-opacity\n             */\n            'divide-opacity': [{ 'divide-opacity': [opacity] }],\n            /**\n             * Divide Style\n             * @see https://tailwindcss.com/docs/divide-style\n             */\n            'divide-style': [{ divide: getLineStyles() }],\n            /**\n             * Border Color\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color': [{ border: [borderColor] }],\n            /**\n             * Border Color X\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-x': [{ 'border-x': [borderColor] }],\n            /**\n             * Border Color Y\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-y': [{ 'border-y': [borderColor] }],\n            /**\n             * Border Color Top\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-t': [{ 'border-t': [borderColor] }],\n            /**\n             * Border Color Right\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-r': [{ 'border-r': [borderColor] }],\n            /**\n             * Border Color Bottom\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-b': [{ 'border-b': [borderColor] }],\n            /**\n             * Border Color Left\n             * @see https://tailwindcss.com/docs/border-color\n             */\n            'border-color-l': [{ 'border-l': [borderColor] }],\n            /**\n             * Divide Color\n             * @see https://tailwindcss.com/docs/divide-color\n             */\n            'divide-color': [{ divide: [borderColor] }],\n            /**\n             * Outline Style\n             * @see https://tailwindcss.com/docs/outline-style\n             */\n            'outline-style': [{ outline: ['', ...getLineStyles()] }],\n            /**\n             * Outline Offset\n             * @see https://tailwindcss.com/docs/outline-offset\n             */\n            'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n            /**\n             * Outline Width\n             * @see https://tailwindcss.com/docs/outline-width\n             */\n            'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n            /**\n             * Outline Color\n             * @see https://tailwindcss.com/docs/outline-color\n             */\n            'outline-color': [{ outline: [colors] }],\n            /**\n             * Ring Width\n             * @see https://tailwindcss.com/docs/ring-width\n             */\n            'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n            /**\n             * Ring Width Inset\n             * @see https://tailwindcss.com/docs/ring-width\n             */\n            'ring-w-inset': ['ring-inset'],\n            /**\n             * Ring Color\n             * @see https://tailwindcss.com/docs/ring-color\n             */\n            'ring-color': [{ ring: [colors] }],\n            /**\n             * Ring Opacity\n             * @see https://tailwindcss.com/docs/ring-opacity\n             */\n            'ring-opacity': [{ 'ring-opacity': [opacity] }],\n            /**\n             * Ring Offset Width\n             * @see https://tailwindcss.com/docs/ring-offset-width\n             */\n            'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n            /**\n             * Ring Offset Color\n             * @see https://tailwindcss.com/docs/ring-offset-color\n             */\n            'ring-offset-color': [{ 'ring-offset': [colors] }],\n            // Effects\n            /**\n             * Box Shadow\n             * @see https://tailwindcss.com/docs/box-shadow\n             */\n            shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n            /**\n             * Box Shadow Color\n             * @see https://tailwindcss.com/docs/box-shadow-color\n             */\n            'shadow-color': [{ shadow: [isAny] }],\n            /**\n             * Opacity\n             * @see https://tailwindcss.com/docs/opacity\n             */\n            opacity: [{ opacity: [opacity] }],\n            /**\n             * Mix Blend Mode\n             * @see https://tailwindcss.com/docs/mix-blend-mode\n             */\n            'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }],\n            /**\n             * Background Blend Mode\n             * @see https://tailwindcss.com/docs/background-blend-mode\n             */\n            'bg-blend': [{ 'bg-blend': getBlendModes() }],\n            // Filters\n            /**\n             * Filter\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://tailwindcss.com/docs/filter\n             */\n            filter: [{ filter: ['', 'none'] }],\n            /**\n             * Blur\n             * @see https://tailwindcss.com/docs/blur\n             */\n            blur: [{ blur: [blur] }],\n            /**\n             * Brightness\n             * @see https://tailwindcss.com/docs/brightness\n             */\n            brightness: [{ brightness: [brightness] }],\n            /**\n             * Contrast\n             * @see https://tailwindcss.com/docs/contrast\n             */\n            contrast: [{ contrast: [contrast] }],\n            /**\n             * Drop Shadow\n             * @see https://tailwindcss.com/docs/drop-shadow\n             */\n            'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n            /**\n             * Grayscale\n             * @see https://tailwindcss.com/docs/grayscale\n             */\n            grayscale: [{ grayscale: [grayscale] }],\n            /**\n             * Hue Rotate\n             * @see https://tailwindcss.com/docs/hue-rotate\n             */\n            'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n            /**\n             * Invert\n             * @see https://tailwindcss.com/docs/invert\n             */\n            invert: [{ invert: [invert] }],\n            /**\n             * Saturate\n             * @see https://tailwindcss.com/docs/saturate\n             */\n            saturate: [{ saturate: [saturate] }],\n            /**\n             * Sepia\n             * @see https://tailwindcss.com/docs/sepia\n             */\n            sepia: [{ sepia: [sepia] }],\n            /**\n             * Backdrop Filter\n             * @deprecated since Tailwind CSS v3.0.0\n             * @see https://tailwindcss.com/docs/backdrop-filter\n             */\n            'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n            /**\n             * Backdrop Blur\n             * @see https://tailwindcss.com/docs/backdrop-blur\n             */\n            'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n            /**\n             * Backdrop Brightness\n             * @see https://tailwindcss.com/docs/backdrop-brightness\n             */\n            'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n            /**\n             * Backdrop Contrast\n             * @see https://tailwindcss.com/docs/backdrop-contrast\n             */\n            'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n            /**\n             * Backdrop Grayscale\n             * @see https://tailwindcss.com/docs/backdrop-grayscale\n             */\n            'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n            /**\n             * Backdrop Hue Rotate\n             * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n             */\n            'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n            /**\n             * Backdrop Invert\n             * @see https://tailwindcss.com/docs/backdrop-invert\n             */\n            'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n            /**\n             * Backdrop Opacity\n             * @see https://tailwindcss.com/docs/backdrop-opacity\n             */\n            'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n            /**\n             * Backdrop Saturate\n             * @see https://tailwindcss.com/docs/backdrop-saturate\n             */\n            'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n            /**\n             * Backdrop Sepia\n             * @see https://tailwindcss.com/docs/backdrop-sepia\n             */\n            'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n            // Tables\n            /**\n             * Border Collapse\n             * @see https://tailwindcss.com/docs/border-collapse\n             */\n            'border-collapse': [{ border: ['collapse', 'separate'] }],\n            /**\n             * Border Spacing\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n            /**\n             * Border Spacing X\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n            /**\n             * Border Spacing Y\n             * @see https://tailwindcss.com/docs/border-spacing\n             */\n            'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n            /**\n             * Table Layout\n             * @see https://tailwindcss.com/docs/table-layout\n             */\n            'table-layout': [{ table: ['auto', 'fixed'] }],\n            /**\n             * Caption Side\n             * @see https://tailwindcss.com/docs/caption-side\n             */\n            caption: [{ caption: ['top', 'bottom'] }],\n            // Transitions and Animation\n            /**\n             * Tranisition Property\n             * @see https://tailwindcss.com/docs/transition-property\n             */\n            transition: [\n                {\n                    transition: [\n                        'none',\n                        'all',\n                        '',\n                        'colors',\n                        'opacity',\n                        'shadow',\n                        'transform',\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Transition Duration\n             * @see https://tailwindcss.com/docs/transition-duration\n             */\n            duration: [{ duration: getNumberAndArbitrary() }],\n            /**\n             * Transition Timing Function\n             * @see https://tailwindcss.com/docs/transition-timing-function\n             */\n            ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n            /**\n             * Transition Delay\n             * @see https://tailwindcss.com/docs/transition-delay\n             */\n            delay: [{ delay: getNumberAndArbitrary() }],\n            /**\n             * Animation\n             * @see https://tailwindcss.com/docs/animation\n             */\n            animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n            // Transforms\n            /**\n             * Transform\n             * @see https://tailwindcss.com/docs/transform\n             */\n            transform: [{ transform: ['', 'gpu', 'none'] }],\n            /**\n             * Scale\n             * @see https://tailwindcss.com/docs/scale\n             */\n            scale: [{ scale: [scale] }],\n            /**\n             * Scale X\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-x': [{ 'scale-x': [scale] }],\n            /**\n             * Scale Y\n             * @see https://tailwindcss.com/docs/scale\n             */\n            'scale-y': [{ 'scale-y': [scale] }],\n            /**\n             * Rotate\n             * @see https://tailwindcss.com/docs/rotate\n             */\n            rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n            /**\n             * Translate X\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-x': [{ 'translate-x': [translate] }],\n            /**\n             * Translate Y\n             * @see https://tailwindcss.com/docs/translate\n             */\n            'translate-y': [{ 'translate-y': [translate] }],\n            /**\n             * Skew X\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-x': [{ 'skew-x': [skew] }],\n            /**\n             * Skew Y\n             * @see https://tailwindcss.com/docs/skew\n             */\n            'skew-y': [{ 'skew-y': [skew] }],\n            /**\n             * Transform Origin\n             * @see https://tailwindcss.com/docs/transform-origin\n             */\n            'transform-origin': [\n                {\n                    origin: [\n                        'center',\n                        'top',\n                        'top-right',\n                        'right',\n                        'bottom-right',\n                        'bottom',\n                        'bottom-left',\n                        'left',\n                        'top-left',\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            // Interactivity\n            /**\n             * Accent Color\n             * @see https://tailwindcss.com/docs/accent-color\n             */\n            accent: [{ accent: ['auto', colors] }],\n            /**\n             * Appearance\n             * @see https://tailwindcss.com/docs/appearance\n             */\n            appearance: [{ appearance: ['none', 'auto'] }],\n            /**\n             * Cursor\n             * @see https://tailwindcss.com/docs/cursor\n             */\n            cursor: [\n                {\n                    cursor: [\n                        'auto',\n                        'default',\n                        'pointer',\n                        'wait',\n                        'text',\n                        'move',\n                        'help',\n                        'not-allowed',\n                        'none',\n                        'context-menu',\n                        'progress',\n                        'cell',\n                        'crosshair',\n                        'vertical-text',\n                        'alias',\n                        'copy',\n                        'no-drop',\n                        'grab',\n                        'grabbing',\n                        'all-scroll',\n                        'col-resize',\n                        'row-resize',\n                        'n-resize',\n                        'e-resize',\n                        's-resize',\n                        'w-resize',\n                        'ne-resize',\n                        'nw-resize',\n                        'se-resize',\n                        'sw-resize',\n                        'ew-resize',\n                        'ns-resize',\n                        'nesw-resize',\n                        'nwse-resize',\n                        'zoom-in',\n                        'zoom-out',\n                        isArbitraryValue,\n                    ],\n                },\n            ],\n            /**\n             * Caret Color\n             * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n             */\n            'caret-color': [{ caret: [colors] }],\n            /**\n             * Pointer Events\n             * @see https://tailwindcss.com/docs/pointer-events\n             */\n            'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n            /**\n             * Resize\n             * @see https://tailwindcss.com/docs/resize\n             */\n            resize: [{ resize: ['none', 'y', 'x', ''] }],\n            /**\n             * Scroll Behavior\n             * @see https://tailwindcss.com/docs/scroll-behavior\n             */\n            'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n            /**\n             * Scroll Margin\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin X\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Y\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Start\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin End\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Top\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Right\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Bottom\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Margin Left\n             * @see https://tailwindcss.com/docs/scroll-margin\n             */\n            'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding X\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Y\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Start\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding End\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Top\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Right\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Bottom\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Padding Left\n             * @see https://tailwindcss.com/docs/scroll-padding\n             */\n            'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n            /**\n             * Scroll Snap Align\n             * @see https://tailwindcss.com/docs/scroll-snap-align\n             */\n            'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n            /**\n             * Scroll Snap Stop\n             * @see https://tailwindcss.com/docs/scroll-snap-stop\n             */\n            'snap-stop': [{ snap: ['normal', 'always'] }],\n            /**\n             * Scroll Snap Type\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n            /**\n             * Scroll Snap Type Strictness\n             * @see https://tailwindcss.com/docs/scroll-snap-type\n             */\n            'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n            /**\n             * Touch Action\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            touch: [\n                {\n                    touch: ['auto', 'none', 'manipulation'],\n                },\n            ],\n            /**\n             * Touch Action X\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-x': [\n                {\n                    'touch-pan': ['x', 'left', 'right'],\n                },\n            ],\n            /**\n             * Touch Action Y\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-y': [\n                {\n                    'touch-pan': ['y', 'up', 'down'],\n                },\n            ],\n            /**\n             * Touch Action Pinch Zoom\n             * @see https://tailwindcss.com/docs/touch-action\n             */\n            'touch-pz': ['touch-pinch-zoom'],\n            /**\n             * User Select\n             * @see https://tailwindcss.com/docs/user-select\n             */\n            select: [{ select: ['none', 'text', 'all', 'auto'] }],\n            /**\n             * Will Change\n             * @see https://tailwindcss.com/docs/will-change\n             */\n            'will-change': [\n                { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n            ],\n            // SVG\n            /**\n             * Fill\n             * @see https://tailwindcss.com/docs/fill\n             */\n            fill: [{ fill: [colors, 'none'] }],\n            /**\n             * Stroke Width\n             * @see https://tailwindcss.com/docs/stroke-width\n             */\n            'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n            /**\n             * Stroke\n             * @see https://tailwindcss.com/docs/stroke\n             */\n            stroke: [{ stroke: [colors, 'none'] }],\n            // Accessibility\n            /**\n             * Screen Readers\n             * @see https://tailwindcss.com/docs/screen-readers\n             */\n            sr: ['sr-only', 'not-sr-only'],\n            /**\n             * Forced Color Adjust\n             * @see https://tailwindcss.com/docs/forced-color-adjust\n             */\n            'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n        },\n        conflictingClassGroups: {\n            overflow: ['overflow-x', 'overflow-y'],\n            overscroll: ['overscroll-x', 'overscroll-y'],\n            inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n            'inset-x': ['right', 'left'],\n            'inset-y': ['top', 'bottom'],\n            flex: ['basis', 'grow', 'shrink'],\n            gap: ['gap-x', 'gap-y'],\n            p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n            px: ['pr', 'pl'],\n            py: ['pt', 'pb'],\n            m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n            mx: ['mr', 'ml'],\n            my: ['mt', 'mb'],\n            size: ['w', 'h'],\n            'font-size': ['leading'],\n            'fvn-normal': [\n                'fvn-ordinal',\n                'fvn-slashed-zero',\n                'fvn-figure',\n                'fvn-spacing',\n                'fvn-fraction',\n            ],\n            'fvn-ordinal': ['fvn-normal'],\n            'fvn-slashed-zero': ['fvn-normal'],\n            'fvn-figure': ['fvn-normal'],\n            'fvn-spacing': ['fvn-normal'],\n            'fvn-fraction': ['fvn-normal'],\n            'line-clamp': ['display', 'overflow'],\n            rounded: [\n                'rounded-s',\n                'rounded-e',\n                'rounded-t',\n                'rounded-r',\n                'rounded-b',\n                'rounded-l',\n                'rounded-ss',\n                'rounded-se',\n                'rounded-ee',\n                'rounded-es',\n                'rounded-tl',\n                'rounded-tr',\n                'rounded-br',\n                'rounded-bl',\n            ],\n            'rounded-s': ['rounded-ss', 'rounded-es'],\n            'rounded-e': ['rounded-se', 'rounded-ee'],\n            'rounded-t': ['rounded-tl', 'rounded-tr'],\n            'rounded-r': ['rounded-tr', 'rounded-br'],\n            'rounded-b': ['rounded-br', 'rounded-bl'],\n            'rounded-l': ['rounded-tl', 'rounded-bl'],\n            'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n            'border-w': [\n                'border-w-s',\n                'border-w-e',\n                'border-w-t',\n                'border-w-r',\n                'border-w-b',\n                'border-w-l',\n            ],\n            'border-w-x': ['border-w-r', 'border-w-l'],\n            'border-w-y': ['border-w-t', 'border-w-b'],\n            'border-color': [\n                'border-color-t',\n                'border-color-r',\n                'border-color-b',\n                'border-color-l',\n            ],\n            'border-color-x': ['border-color-r', 'border-color-l'],\n            'border-color-y': ['border-color-t', 'border-color-b'],\n            'scroll-m': [\n                'scroll-mx',\n                'scroll-my',\n                'scroll-ms',\n                'scroll-me',\n                'scroll-mt',\n                'scroll-mr',\n                'scroll-mb',\n                'scroll-ml',\n            ],\n            'scroll-mx': ['scroll-mr', 'scroll-ml'],\n            'scroll-my': ['scroll-mt', 'scroll-mb'],\n            'scroll-p': [\n                'scroll-px',\n                'scroll-py',\n                'scroll-ps',\n                'scroll-pe',\n                'scroll-pt',\n                'scroll-pr',\n                'scroll-pb',\n                'scroll-pl',\n            ],\n            'scroll-px': ['scroll-pr', 'scroll-pl'],\n            'scroll-py': ['scroll-pt', 'scroll-pb'],\n            touch: ['touch-x', 'touch-y', 'touch-pz'],\n            'touch-x': ['touch'],\n            'touch-y': ['touch'],\n            'touch-pz': ['touch'],\n        },\n        conflictingClassGroupModifiers: {\n            'font-size': ['leading'],\n        },\n    } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs) {\n  return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef(({ className, ...props }, ref) => (\n  <AccordionPrimitive.Item ref={ref} className={cn(\"border-b\", className)} {...props} />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"flex\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 text-left text-sm\",\n        className\n      )}\n      {...props}>\n      {children}\n      <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n    {...props}>\n    <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n  </AccordionPrimitive.Content>\n))\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * GSAP 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _config = {\n  autoSleep: 120,\n  force3D: \"auto\",\n  nullTargetWarn: 1,\n  units: {\n    lineHeight: \"\"\n  }\n},\n    _defaults = {\n  duration: .5,\n  overwrite: false,\n  delay: 0\n},\n    _suppressOverwrites,\n    _reverting,\n    _context,\n    _bigNum = 1e8,\n    _tinyNum = 1 / _bigNum,\n    _2PI = Math.PI * 2,\n    _HALF_PI = _2PI / 4,\n    _gsID = 0,\n    _sqrt = Math.sqrt,\n    _cos = Math.cos,\n    _sin = Math.sin,\n    _isString = function _isString(value) {\n  return typeof value === \"string\";\n},\n    _isFunction = function _isFunction(value) {\n  return typeof value === \"function\";\n},\n    _isNumber = function _isNumber(value) {\n  return typeof value === \"number\";\n},\n    _isUndefined = function _isUndefined(value) {\n  return typeof value === \"undefined\";\n},\n    _isObject = function _isObject(value) {\n  return typeof value === \"object\";\n},\n    _isNotFalse = function _isNotFalse(value) {\n  return value !== false;\n},\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _isFuncOrString = function _isFuncOrString(value) {\n  return _isFunction(value) || _isString(value);\n},\n    _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\n    // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\n_isArray = Array.isArray,\n    _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\n    //only numbers (including negatives and decimals) but NOT relative values.\n_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\n    //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n    _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\n    //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\n_relExp = /[+-]=-?[.\\d]+/,\n    _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\n    // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\n_unitExp = /^[+\\-=e\\s\\d]*\\d+[.\\d]*([a-z]*|%)\\s*$/i,\n    _globalTimeline,\n    _win,\n    _coreInitted,\n    _doc,\n    _globals = {},\n    _installScope = {},\n    _coreReady,\n    _install = function _install(scope) {\n  return (_installScope = _merge(scope, _globals)) && gsap;\n},\n    _missingPlugin = function _missingPlugin(property, value) {\n  return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\n},\n    _warn = function _warn(message, suppress) {\n  return !suppress && console.warn(message);\n},\n    _addGlobal = function _addGlobal(name, obj) {\n  return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\n},\n    _emptyFunc = function _emptyFunc() {\n  return 0;\n},\n    _startAtRevertConfig = {\n  suppressEvents: true,\n  isStart: true,\n  kill: false\n},\n    _revertConfigNoKill = {\n  suppressEvents: true,\n  kill: false\n},\n    _revertConfig = {\n  suppressEvents: true\n},\n    _reservedProps = {},\n    _lazyTweens = [],\n    _lazyLookup = {},\n    _lastRenderedFrame,\n    _plugins = {},\n    _effects = {},\n    _nextGCFrame = 30,\n    _harnessPlugins = [],\n    _callbackNames = \"\",\n    _harness = function _harness(targets) {\n  var target = targets[0],\n      harnessPlugin,\n      i;\n  _isObject(target) || _isFunction(target) || (targets = [targets]);\n\n  if (!(harnessPlugin = (target._gsap || {}).harness)) {\n    // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\n    i = _harnessPlugins.length;\n\n    while (i-- && !_harnessPlugins[i].targetTest(target)) {}\n\n    harnessPlugin = _harnessPlugins[i];\n  }\n\n  i = targets.length;\n\n  while (i--) {\n    targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\n  }\n\n  return targets;\n},\n    _getCache = function _getCache(target) {\n  return target._gsap || _harness(toArray(target))[0]._gsap;\n},\n    _getProperty = function _getProperty(target, property, v) {\n  return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\n},\n    _forEachName = function _forEachName(names, func) {\n  return (names = names.split(\",\")).forEach(func) || names;\n},\n    //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\n_round = function _round(value) {\n  return Math.round(value * 100000) / 100000 || 0;\n},\n    _roundPrecise = function _roundPrecise(value) {\n  return Math.round(value * 10000000) / 10000000 || 0;\n},\n    // increased precision mostly for timing values.\n_parseRelative = function _parseRelative(start, value) {\n  var operator = value.charAt(0),\n      end = parseFloat(value.substr(2));\n  start = parseFloat(start);\n  return operator === \"+\" ? start + end : operator === \"-\" ? start - end : operator === \"*\" ? start * end : start / end;\n},\n    _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\n  //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\n  var l = toFind.length,\n      i = 0;\n\n  for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\n\n  return i < l;\n},\n    _lazyRender = function _lazyRender() {\n  var l = _lazyTweens.length,\n      a = _lazyTweens.slice(0),\n      i,\n      tween;\n\n  _lazyLookup = {};\n  _lazyTweens.length = 0;\n\n  for (i = 0; i < l; i++) {\n    tween = a[i];\n    tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\n  }\n},\n    _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\n  _lazyTweens.length && !_reverting && _lazyRender();\n  animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));\n  _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n},\n    _numericIfPossible = function _numericIfPossible(value) {\n  var n = parseFloat(value);\n  return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\n},\n    _passThrough = function _passThrough(p) {\n  return p;\n},\n    _setDefaults = function _setDefaults(obj, defaults) {\n  for (var p in defaults) {\n    p in obj || (obj[p] = defaults[p]);\n  }\n\n  return obj;\n},\n    _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\n  return function (obj, defaults) {\n    for (var p in defaults) {\n      p in obj || p === \"duration\" && excludeDuration || p === \"ease\" || (obj[p] = defaults[p]);\n    }\n  };\n},\n    _merge = function _merge(base, toMerge) {\n  for (var p in toMerge) {\n    base[p] = toMerge[p];\n  }\n\n  return base;\n},\n    _mergeDeep = function _mergeDeep(base, toMerge) {\n  for (var p in toMerge) {\n    p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\n  }\n\n  return base;\n},\n    _copyExcluding = function _copyExcluding(obj, excluding) {\n  var copy = {},\n      p;\n\n  for (p in obj) {\n    p in excluding || (copy[p] = obj[p]);\n  }\n\n  return copy;\n},\n    _inheritDefaults = function _inheritDefaults(vars) {\n  var parent = vars.parent || _globalTimeline,\n      func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\n\n  if (_isNotFalse(vars.inherit)) {\n    while (parent) {\n      func(vars, parent.vars.defaults);\n      parent = parent.parent || parent._dp;\n    }\n  }\n\n  return vars;\n},\n    _arraysMatch = function _arraysMatch(a1, a2) {\n  var i = a1.length,\n      match = i === a2.length;\n\n  while (match && i-- && a1[i] === a2[i]) {}\n\n  return i < 0;\n},\n    _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\n  if (firstProp === void 0) {\n    firstProp = \"_first\";\n  }\n\n  if (lastProp === void 0) {\n    lastProp = \"_last\";\n  }\n\n  var prev = parent[lastProp],\n      t;\n\n  if (sortBy) {\n    t = child[sortBy];\n\n    while (prev && prev[sortBy] > t) {\n      prev = prev._prev;\n    }\n  }\n\n  if (prev) {\n    child._next = prev._next;\n    prev._next = child;\n  } else {\n    child._next = parent[firstProp];\n    parent[firstProp] = child;\n  }\n\n  if (child._next) {\n    child._next._prev = child;\n  } else {\n    parent[lastProp] = child;\n  }\n\n  child._prev = prev;\n  child.parent = child._dp = parent;\n  return child;\n},\n    _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\n  if (firstProp === void 0) {\n    firstProp = \"_first\";\n  }\n\n  if (lastProp === void 0) {\n    lastProp = \"_last\";\n  }\n\n  var prev = child._prev,\n      next = child._next;\n\n  if (prev) {\n    prev._next = next;\n  } else if (parent[firstProp] === child) {\n    parent[firstProp] = next;\n  }\n\n  if (next) {\n    next._prev = prev;\n  } else if (parent[lastProp] === child) {\n    parent[lastProp] = prev;\n  }\n\n  child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\n},\n    _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\n  child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);\n  child._act = 0;\n},\n    _uncache = function _uncache(animation, child) {\n  if (animation && (!child || child._end > animation._dur || child._start < 0)) {\n    // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\n    var a = animation;\n\n    while (a) {\n      a._dirty = 1;\n      a = a.parent;\n    }\n  }\n\n  return animation;\n},\n    _recacheAncestors = function _recacheAncestors(animation) {\n  var parent = animation.parent;\n\n  while (parent && parent.parent) {\n    //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n    parent._dirty = 1;\n    parent.totalDuration();\n    parent = parent.parent;\n  }\n\n  return animation;\n},\n    _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {\n  return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));\n},\n    _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\n  return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\n},\n    _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\n  return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\n},\n    // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\n  var whole = Math.floor(tTime /= cycleDuration);\n  return tTime && whole === tTime ? whole - 1 : whole;\n},\n    _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\n  return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\n},\n    _setEnd = function _setEnd(animation) {\n  return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\n},\n    _alignPlayhead = function _alignPlayhead(animation, totalTime) {\n  // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\n  var parent = animation._dp;\n\n  if (parent && parent.smoothChildTiming && animation._ts) {\n    animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\n\n    _setEnd(animation);\n\n    parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n  }\n\n  return animation;\n},\n\n/*\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\n\tlet cycleDuration = duration + repeatDelay,\n\t\ttime = _round(clampedTotalTime % cycleDuration);\n\tif (time > duration) {\n\t\ttime = duration;\n\t}\n\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\n},\n*/\n_postAddChecks = function _postAddChecks(timeline, child) {\n  var t;\n\n  if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {\n    // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true).\n    t = _parentToChildTotalTime(timeline.rawTime(), child);\n\n    if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\n      child.render(t, true);\n    }\n  } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\n\n  if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\n    //in case any of the ancestors had completed but should now be enabled...\n    if (timeline._dur < timeline.duration()) {\n      t = timeline;\n\n      while (t._dp) {\n        t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\n\n        t = t._dp;\n      }\n    }\n\n    timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\n  }\n},\n    _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\n  child.parent && _removeFromParent(child);\n  child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\n  child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\n\n  _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\n\n  _isFromOrFromStart(child) || (timeline._recent = child);\n  skipChecks || _postAddChecks(timeline, child);\n  timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)\n\n  return timeline;\n},\n    _scrollTrigger = function _scrollTrigger(animation, trigger) {\n  return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\n},\n    _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {\n  _initTween(tween, time, tTime);\n\n  if (!tween._initted) {\n    return 1;\n  }\n\n  if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\n    _lazyTweens.push(tween);\n\n    tween._lazy = [tTime, suppressEvents];\n    return 1;\n  }\n},\n    _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\n  var parent = _ref.parent;\n  return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\n},\n    // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\n  var data = _ref2.data;\n  return data === \"isFromStart\" || data === \"isStart\";\n},\n    _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\n  var prevRatio = tween.ratio,\n      ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\n      // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \"startAt\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \"from\" and \"fromTo\" startAt tweens are rendered the first time at a ratio of 1.\n  repeatDelay = tween._rDelay,\n      tTime = 0,\n      pt,\n      iteration,\n      prevIteration;\n\n  if (repeatDelay && tween._repeat) {\n    // in case there's a zero-duration tween that has a repeat with a repeatDelay\n    tTime = _clamp(0, tween._tDur, totalTime);\n    iteration = _animationCycle(tTime, repeatDelay);\n    tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\n\n    if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\n      // if iteration changed\n      prevRatio = 1 - ratio;\n      tween.vars.repeatRefresh && tween._initted && tween.invalidate();\n    }\n  }\n\n  if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\n    if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {\n      // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n      return;\n    }\n\n    prevIteration = tween._zTime;\n    tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n    suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\n\n    tween.ratio = ratio;\n    tween._from && (ratio = 1 - ratio);\n    tween._time = 0;\n    tween._tTime = tTime;\n    pt = tween._pt;\n\n    while (pt) {\n      pt.r(ratio, pt.d);\n      pt = pt._next;\n    }\n\n    totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);\n    tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\n    tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\n\n    if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\n      ratio && _removeFromParent(tween, 1);\n\n      if (!suppressEvents && !_reverting) {\n        _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\n\n        tween._prom && tween._prom();\n      }\n    }\n  } else if (!tween._zTime) {\n    tween._zTime = totalTime;\n  }\n},\n    _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\n  var child;\n\n  if (time > prevTime) {\n    child = animation._first;\n\n    while (child && child._start <= time) {\n      if (child.data === \"isPause\" && child._start > prevTime) {\n        return child;\n      }\n\n      child = child._next;\n    }\n  } else {\n    child = animation._last;\n\n    while (child && child._start >= time) {\n      if (child.data === \"isPause\" && child._start < prevTime) {\n        return child;\n      }\n\n      child = child._prev;\n    }\n  }\n},\n    _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\n  var repeat = animation._repeat,\n      dur = _roundPrecise(duration) || 0,\n      totalProgress = animation._tTime / animation._tDur;\n  totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\n  animation._dur = dur;\n  animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\n  totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);\n  animation.parent && _setEnd(animation);\n  skipUncache || _uncache(animation.parent, animation);\n  return animation;\n},\n    _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\n  return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\n},\n    _zeroPosition = {\n  _start: 0,\n  endTime: _emptyFunc,\n  totalDuration: _emptyFunc\n},\n    _parsePosition = function _parsePosition(animation, position, percentAnimation) {\n  var labels = animation.labels,\n      recent = animation._recent || _zeroPosition,\n      clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\n      //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n  i,\n      offset,\n      isPercent;\n\n  if (_isString(position) && (isNaN(position) || position in labels)) {\n    //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n    offset = position.charAt(0);\n    isPercent = position.substr(-1) === \"%\";\n    i = position.indexOf(\"=\");\n\n    if (offset === \"<\" || offset === \">\") {\n      i >= 0 && (position = position.replace(/=/, \"\"));\n      return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\n    }\n\n    if (i < 0) {\n      position in labels || (labels[position] = clippedDuration);\n      return labels[position];\n    }\n\n    offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\n\n    if (isPercent && percentAnimation) {\n      offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\n    }\n\n    return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\n  }\n\n  return position == null ? clippedDuration : +position;\n},\n    _createTweenType = function _createTweenType(type, params, timeline) {\n  var isLegacy = _isNumber(params[1]),\n      varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\n      vars = params[varsIndex],\n      irVars,\n      parent;\n\n  isLegacy && (vars.duration = params[1]);\n  vars.parent = timeline;\n\n  if (type) {\n    irVars = vars;\n    parent = timeline;\n\n    while (parent && !(\"immediateRender\" in irVars)) {\n      // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\n      irVars = parent.vars.defaults || {};\n      parent = _isNotFalse(parent.vars.inherit) && parent.parent;\n    }\n\n    vars.immediateRender = _isNotFalse(irVars.immediateRender);\n    type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \"from\" vars\n  }\n\n  return new Tween(params[0], vars, params[varsIndex + 1]);\n},\n    _conditionalReturn = function _conditionalReturn(value, func) {\n  return value || value === 0 ? func(value) : func;\n},\n    _clamp = function _clamp(min, max, value) {\n  return value < min ? min : value > max ? max : value;\n},\n    getUnit = function getUnit(value, v) {\n  return !_isString(value) || !(v = _unitExp.exec(value)) ? \"\" : v[1];\n},\n    // note: protect against padded numbers as strings, like \"100.100\". That shouldn't return \"00\" as the unit. If it's numeric, return no unit.\nclamp = function clamp(min, max, value) {\n  return _conditionalReturn(value, function (v) {\n    return _clamp(min, max, v);\n  });\n},\n    _slice = [].slice,\n    _isArrayLike = function _isArrayLike(value, nonEmpty) {\n  return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\n},\n    _flatten = function _flatten(ar, leaveStrings, accumulator) {\n  if (accumulator === void 0) {\n    accumulator = [];\n  }\n\n  return ar.forEach(function (value) {\n    var _accumulator;\n\n    return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\n  }) || accumulator;\n},\n    //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\ntoArray = function toArray(value, scope, leaveStrings) {\n  return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\n},\n    selector = function selector(value) {\n  value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\n  return function (v) {\n    var el = value.current || value.nativeElement || value;\n    return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\n  };\n},\n    shuffle = function shuffle(a) {\n  return a.sort(function () {\n    return .5 - Math.random();\n  });\n},\n    // alternative that's a bit faster and more reliably diverse but bigger:   for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a;\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\ndistribute = function distribute(v) {\n  if (_isFunction(v)) {\n    return v;\n  }\n\n  var vars = _isObject(v) ? v : {\n    each: v\n  },\n      //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n  ease = _parseEase(vars.ease),\n      from = vars.from || 0,\n      base = parseFloat(vars.base) || 0,\n      cache = {},\n      isDecimal = from > 0 && from < 1,\n      ratios = isNaN(from) || isDecimal,\n      axis = vars.axis,\n      ratioX = from,\n      ratioY = from;\n\n  if (_isString(from)) {\n    ratioX = ratioY = {\n      center: .5,\n      edges: .5,\n      end: 1\n    }[from] || 0;\n  } else if (!isDecimal && ratios) {\n    ratioX = from[0];\n    ratioY = from[1];\n  }\n\n  return function (i, target, a) {\n    var l = (a || vars).length,\n        distances = cache[l],\n        originX,\n        originY,\n        x,\n        y,\n        d,\n        j,\n        max,\n        min,\n        wrapAt;\n\n    if (!distances) {\n      wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\n\n      if (!wrapAt) {\n        max = -_bigNum;\n\n        while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\n\n        wrapAt < l && wrapAt--;\n      }\n\n      distances = cache[l] = [];\n      originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\n      originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\n      max = 0;\n      min = _bigNum;\n\n      for (j = 0; j < l; j++) {\n        x = j % wrapAt - originX;\n        y = originY - (j / wrapAt | 0);\n        distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\n        d > max && (max = d);\n        d < min && (min = d);\n      }\n\n      from === \"random\" && shuffle(distances);\n      distances.max = max - min;\n      distances.min = min;\n      distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\n      distances.b = l < 0 ? base - l : base;\n      distances.u = getUnit(vars.amount || vars.each) || 0; //unit\n\n      ease = ease && l < 0 ? _invertEase(ease) : ease;\n    }\n\n    l = (distances[i] - distances.min) / distances.max || 0;\n    return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\n  };\n},\n    _roundModifier = function _roundModifier(v) {\n  //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n  var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\n\n  return function (raw) {\n    var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);\n\n    return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\n  };\n},\n    snap = function snap(snapTo, value) {\n  var isArray = _isArray(snapTo),\n      radius,\n      is2D;\n\n  if (!isArray && _isObject(snapTo)) {\n    radius = isArray = snapTo.radius || _bigNum;\n\n    if (snapTo.values) {\n      snapTo = toArray(snapTo.values);\n\n      if (is2D = !_isNumber(snapTo[0])) {\n        radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\n      }\n    } else {\n      snapTo = _roundModifier(snapTo.increment);\n    }\n  }\n\n  return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\n    is2D = snapTo(raw);\n    return Math.abs(is2D - raw) <= radius ? is2D : raw;\n  } : function (raw) {\n    var x = parseFloat(is2D ? raw.x : raw),\n        y = parseFloat(is2D ? raw.y : 0),\n        min = _bigNum,\n        closest = 0,\n        i = snapTo.length,\n        dx,\n        dy;\n\n    while (i--) {\n      if (is2D) {\n        dx = snapTo[i].x - x;\n        dy = snapTo[i].y - y;\n        dx = dx * dx + dy * dy;\n      } else {\n        dx = Math.abs(snapTo[i] - x);\n      }\n\n      if (dx < min) {\n        min = dx;\n        closest = i;\n      }\n    }\n\n    closest = !radius || min <= radius ? snapTo[closest] : raw;\n    return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\n  });\n},\n    random = function random(min, max, roundingIncrement, returnFunction) {\n  return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\n    return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\n  });\n},\n    pipe = function pipe() {\n  for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\n    functions[_key] = arguments[_key];\n  }\n\n  return function (value) {\n    return functions.reduce(function (v, f) {\n      return f(v);\n    }, value);\n  };\n},\n    unitize = function unitize(func, unit) {\n  return function (value) {\n    return func(parseFloat(value)) + (unit || getUnit(value));\n  };\n},\n    normalize = function normalize(min, max, value) {\n  return mapRange(min, max, 0, 1, value);\n},\n    _wrapArray = function _wrapArray(a, wrapper, value) {\n  return _conditionalReturn(value, function (index) {\n    return a[~~wrapper(index)];\n  });\n},\n    wrap = function wrap(min, max, value) {\n  // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\n  var range = max - min;\n  return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\n    return (range + (value - min) % range) % range + min;\n  });\n},\n    wrapYoyo = function wrapYoyo(min, max, value) {\n  var range = max - min,\n      total = range * 2;\n  return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\n    value = (total + (value - min) % total) % total || 0;\n    return min + (value > range ? total - value : value);\n  });\n},\n    _replaceRandom = function _replaceRandom(value) {\n  //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\n  var prev = 0,\n      s = \"\",\n      i,\n      nums,\n      end,\n      isArray;\n\n  while (~(i = value.indexOf(\"random(\", prev))) {\n    end = value.indexOf(\")\", i);\n    isArray = value.charAt(i + 7) === \"[\";\n    nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\n    s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\n    prev = end + 1;\n  }\n\n  return s + value.substr(prev, value.length - prev);\n},\n    mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\n  var inRange = inMax - inMin,\n      outRange = outMax - outMin;\n  return _conditionalReturn(value, function (value) {\n    return outMin + ((value - inMin) / inRange * outRange || 0);\n  });\n},\n    interpolate = function interpolate(start, end, progress, mutate) {\n  var func = isNaN(start + end) ? 0 : function (p) {\n    return (1 - p) * start + p * end;\n  };\n\n  if (!func) {\n    var isString = _isString(start),\n        master = {},\n        p,\n        i,\n        interpolators,\n        l,\n        il;\n\n    progress === true && (mutate = 1) && (progress = null);\n\n    if (isString) {\n      start = {\n        p: start\n      };\n      end = {\n        p: end\n      };\n    } else if (_isArray(start) && !_isArray(end)) {\n      interpolators = [];\n      l = start.length;\n      il = l - 2;\n\n      for (i = 1; i < l; i++) {\n        interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\n      }\n\n      l--;\n\n      func = function func(p) {\n        p *= l;\n        var i = Math.min(il, ~~p);\n        return interpolators[i](p - i);\n      };\n\n      progress = end;\n    } else if (!mutate) {\n      start = _merge(_isArray(start) ? [] : {}, start);\n    }\n\n    if (!interpolators) {\n      for (p in end) {\n        _addPropTween.call(master, start, p, \"get\", end[p]);\n      }\n\n      func = function func(p) {\n        return _renderPropTweens(p, master) || (isString ? start.p : start);\n      };\n    }\n  }\n\n  return _conditionalReturn(progress, func);\n},\n    _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\n  //used for nextLabel() and previousLabel()\n  var labels = timeline.labels,\n      min = _bigNum,\n      p,\n      distance,\n      label;\n\n  for (p in labels) {\n    distance = labels[p] - fromTime;\n\n    if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\n      label = p;\n      min = distance;\n    }\n  }\n\n  return label;\n},\n    _callback = function _callback(animation, type, executeLazyFirst) {\n  var v = animation.vars,\n      callback = v[type],\n      prevContext = _context,\n      context = animation._ctx,\n      params,\n      scope,\n      result;\n\n  if (!callback) {\n    return;\n  }\n\n  params = v[type + \"Params\"];\n  scope = v.callbackScope || animation;\n  executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\n  context && (_context = context);\n  result = params ? callback.apply(scope, params) : callback.call(scope);\n  _context = prevContext;\n  return result;\n},\n    _interrupt = function _interrupt(animation) {\n  _removeFromParent(animation);\n\n  animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);\n  animation.progress() < 1 && _callback(animation, \"onInterrupt\");\n  return animation;\n},\n    _quickTween,\n    _registerPluginQueue = [],\n    _createPlugin = function _createPlugin(config) {\n  if (!config) return;\n  config = !config.name && config[\"default\"] || config; // UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\n\n  if (_windowExists() || config.headless) {\n    // edge case: some build tools may pass in a null/undefined value\n    var name = config.name,\n        isFunc = _isFunction(config),\n        Plugin = name && !isFunc && config.init ? function () {\n      this._props = [];\n    } : config,\n        //in case someone passes in an object that's not a plugin, like CustomEase\n    instanceDefaults = {\n      init: _emptyFunc,\n      render: _renderPropTweens,\n      add: _addPropTween,\n      kill: _killPropTweensOf,\n      modifier: _addPluginModifier,\n      rawVars: 0\n    },\n        statics = {\n      targetTest: 0,\n      get: 0,\n      getSetter: _getSetter,\n      aliases: {},\n      register: 0\n    };\n\n    _wake();\n\n    if (config !== Plugin) {\n      if (_plugins[name]) {\n        return;\n      }\n\n      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\n\n\n      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\n\n\n      _plugins[Plugin.prop = name] = Plugin;\n\n      if (config.targetTest) {\n        _harnessPlugins.push(Plugin);\n\n        _reservedProps[name] = 1;\n      }\n\n      name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\"; //for the global name. \"motionPath\" should become MotionPathPlugin\n    }\n\n    _addGlobal(name, Plugin);\n\n    config.register && config.register(gsap, Plugin, PropTween);\n  } else {\n    _registerPluginQueue.push(config);\n  }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * COLORS\n * --------------------------------------------------------------------------------------\n */\n_255 = 255,\n    _colorLookup = {\n  aqua: [0, _255, _255],\n  lime: [0, _255, 0],\n  silver: [192, 192, 192],\n  black: [0, 0, 0],\n  maroon: [128, 0, 0],\n  teal: [0, 128, 128],\n  blue: [0, 0, _255],\n  navy: [0, 0, 128],\n  white: [_255, _255, _255],\n  olive: [128, 128, 0],\n  yellow: [_255, _255, 0],\n  orange: [_255, 165, 0],\n  gray: [128, 128, 128],\n  purple: [128, 0, 128],\n  green: [0, 128, 0],\n  red: [_255, 0, 0],\n  pink: [_255, 192, 203],\n  cyan: [0, _255, _255],\n  transparent: [_255, _255, _255, 0]\n},\n    // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:\n// let ctx = _doc.createElement(\"canvas\").getContext(\"2d\");\n// _forEachName(\"aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan\", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});\n_hue = function _hue(h, m1, m2) {\n  h += h < 0 ? 1 : h > 1 ? -1 : 0;\n  return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\n},\n    splitColor = function splitColor(v, toHSL, forceAlpha) {\n  var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\n      r,\n      g,\n      b,\n      h,\n      s,\n      l,\n      max,\n      min,\n      d,\n      wasHSL;\n\n  if (!a) {\n    if (v.substr(-1) === \",\") {\n      //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n      v = v.substr(0, v.length - 1);\n    }\n\n    if (_colorLookup[v]) {\n      a = _colorLookup[v];\n    } else if (v.charAt(0) === \"#\") {\n      if (v.length < 6) {\n        //for shorthand like #9F0 or #9F0F (could have alpha)\n        r = v.charAt(1);\n        g = v.charAt(2);\n        b = v.charAt(3);\n        v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\n      }\n\n      if (v.length === 9) {\n        // hex with alpha, like #fd5e53ff\n        a = parseInt(v.substr(1, 6), 16);\n        return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\n      }\n\n      v = parseInt(v.substr(1), 16);\n      a = [v >> 16, v >> 8 & _255, v & _255];\n    } else if (v.substr(0, 3) === \"hsl\") {\n      a = wasHSL = v.match(_strictNumExp);\n\n      if (!toHSL) {\n        h = +a[0] % 360 / 360;\n        s = +a[1] / 100;\n        l = +a[2] / 100;\n        g = l <= .5 ? l * (s + 1) : l + s - l * s;\n        r = l * 2 - g;\n        a.length > 3 && (a[3] *= 1); //cast as number\n\n        a[0] = _hue(h + 1 / 3, r, g);\n        a[1] = _hue(h, r, g);\n        a[2] = _hue(h - 1 / 3, r, g);\n      } else if (~v.indexOf(\"=\")) {\n        //if relative values are found, just return the raw strings with the relative prefixes in place.\n        a = v.match(_numExp);\n        forceAlpha && a.length < 4 && (a[3] = 1);\n        return a;\n      }\n    } else {\n      a = v.match(_strictNumExp) || _colorLookup.transparent;\n    }\n\n    a = a.map(Number);\n  }\n\n  if (toHSL && !wasHSL) {\n    r = a[0] / _255;\n    g = a[1] / _255;\n    b = a[2] / _255;\n    max = Math.max(r, g, b);\n    min = Math.min(r, g, b);\n    l = (max + min) / 2;\n\n    if (max === min) {\n      h = s = 0;\n    } else {\n      d = max - min;\n      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n      h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n      h *= 60;\n    }\n\n    a[0] = ~~(h + .5);\n    a[1] = ~~(s * 100 + .5);\n    a[2] = ~~(l * 100 + .5);\n  }\n\n  forceAlpha && a.length < 4 && (a[3] = 1);\n  return a;\n},\n    _colorOrderData = function _colorOrderData(v) {\n  // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \"c\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\n  var values = [],\n      c = [],\n      i = -1;\n  v.split(_colorExp).forEach(function (v) {\n    var a = v.match(_numWithUnitExp) || [];\n    values.push.apply(values, a);\n    c.push(i += a.length + 1);\n  });\n  values.c = c;\n  return values;\n},\n    _formatColors = function _formatColors(s, toHSL, orderMatchData) {\n  var result = \"\",\n      colors = (s + result).match(_colorExp),\n      type = toHSL ? \"hsla(\" : \"rgba(\",\n      i = 0,\n      c,\n      shell,\n      d,\n      l;\n\n  if (!colors) {\n    return s;\n  }\n\n  colors = colors.map(function (color) {\n    return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\n  });\n\n  if (orderMatchData) {\n    d = _colorOrderData(s);\n    c = orderMatchData.c;\n\n    if (c.join(result) !== d.c.join(result)) {\n      shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\n      l = shell.length - 1;\n\n      for (; i < l; i++) {\n        result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\n      }\n    }\n  }\n\n  if (!shell) {\n    shell = s.split(_colorExp);\n    l = shell.length - 1;\n\n    for (; i < l; i++) {\n      result += shell[i] + colors[i];\n    }\n  }\n\n  return result + shell[l];\n},\n    _colorExp = function () {\n  var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\n      //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\n  p;\n\n  for (p in _colorLookup) {\n    s += \"|\" + p + \"\\\\b\";\n  }\n\n  return new RegExp(s + \")\", \"gi\");\n}(),\n    _hslExp = /hsl[a]?\\(/,\n    _colorStringFilter = function _colorStringFilter(a) {\n  var combined = a.join(\" \"),\n      toHSL;\n  _colorExp.lastIndex = 0;\n\n  if (_colorExp.test(combined)) {\n    toHSL = _hslExp.test(combined);\n    a[1] = _formatColors(a[1], toHSL);\n    a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\n\n    return true;\n  }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TICKER\n * --------------------------------------------------------------------------------------\n */\n_tickerActive,\n    _ticker = function () {\n  var _getTime = Date.now,\n      _lagThreshold = 500,\n      _adjustedLag = 33,\n      _startTime = _getTime(),\n      _lastUpdate = _startTime,\n      _gap = 1000 / 240,\n      _nextTime = _gap,\n      _listeners = [],\n      _id,\n      _req,\n      _raf,\n      _self,\n      _delta,\n      _i,\n      _tick = function _tick(v) {\n    var elapsed = _getTime() - _lastUpdate,\n        manual = v === true,\n        overlap,\n        dispatch,\n        time,\n        frame;\n\n    (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);\n    _lastUpdate += elapsed;\n    time = _lastUpdate - _startTime;\n    overlap = time - _nextTime;\n\n    if (overlap > 0 || manual) {\n      frame = ++_self.frame;\n      _delta = time - _self.time * 1000;\n      _self.time = time = time / 1000;\n      _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\n      dispatch = 1;\n    }\n\n    manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\n    if (dispatch) {\n      for (_i = 0; _i < _listeners.length; _i++) {\n        // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\n        _listeners[_i](time, _delta, frame, v);\n      }\n    }\n  };\n\n  _self = {\n    time: 0,\n    frame: 0,\n    tick: function tick() {\n      _tick(true);\n    },\n    deltaRatio: function deltaRatio(fps) {\n      return _delta / (1000 / (fps || 60));\n    },\n    wake: function wake() {\n      if (_coreReady) {\n        if (!_coreInitted && _windowExists()) {\n          _win = _coreInitted = window;\n          _doc = _win.document || {};\n          _globals.gsap = gsap;\n          (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\n\n          _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\n\n          _registerPluginQueue.forEach(_createPlugin);\n        }\n\n        _raf = typeof requestAnimationFrame !== \"undefined\" && requestAnimationFrame;\n        _id && _self.sleep();\n\n        _req = _raf || function (f) {\n          return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\n        };\n\n        _tickerActive = 1;\n\n        _tick(2);\n      }\n    },\n    sleep: function sleep() {\n      (_raf ? cancelAnimationFrame : clearTimeout)(_id);\n      _tickerActive = 0;\n      _req = _emptyFunc;\n    },\n    lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\n      _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited\n\n      _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);\n    },\n    fps: function fps(_fps) {\n      _gap = 1000 / (_fps || 240);\n      _nextTime = _self.time * 1000 + _gap;\n    },\n    add: function add(callback, once, prioritize) {\n      var func = once ? function (t, d, f, v) {\n        callback(t, d, f, v);\n\n        _self.remove(func);\n      } : callback;\n\n      _self.remove(callback);\n\n      _listeners[prioritize ? \"unshift\" : \"push\"](func);\n\n      _wake();\n\n      return func;\n    },\n    remove: function remove(callback, i) {\n      ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\n    },\n    _listeners: _listeners\n  };\n  return _self;\n}(),\n    _wake = function _wake() {\n  return !_tickerActive && _ticker.wake();\n},\n    //also ensures the core classes are initialized.\n\n/*\n* -------------------------------------------------\n* EASING\n* -------------------------------------------------\n*/\n_easeMap = {},\n    _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\n    _quotesExp = /[\"']/g,\n    _parseObjectInString = function _parseObjectInString(value) {\n  //takes a string like \"{wiggles:10, type:anticipate})\" and turns it into a real object. Notice it ends in \")\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\n  var obj = {},\n      split = value.substr(1, value.length - 3).split(\":\"),\n      key = split[0],\n      i = 1,\n      l = split.length,\n      index,\n      val,\n      parsedVal;\n\n  for (; i < l; i++) {\n    val = split[i];\n    index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\n    parsedVal = val.substr(0, index);\n    obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\n    key = val.substr(index + 1).trim();\n  }\n\n  return obj;\n},\n    _valueInParentheses = function _valueInParentheses(value) {\n  var open = value.indexOf(\"(\") + 1,\n      close = value.indexOf(\")\"),\n      nested = value.indexOf(\"(\", open);\n  return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\n},\n    _configEaseFromString = function _configEaseFromString(name) {\n  //name can be a string like \"elastic.out(1,0.5)\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\n  var split = (name + \"\").split(\"(\"),\n      ease = _easeMap[split[0]];\n  return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\n},\n    _invertEase = function _invertEase(ease) {\n  return function (p) {\n    return 1 - ease(1 - p);\n  };\n},\n    // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\n  var child = timeline._first,\n      ease;\n\n  while (child) {\n    if (child instanceof Timeline) {\n      _propagateYoyoEase(child, isYoyo);\n    } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\n      if (child.timeline) {\n        _propagateYoyoEase(child.timeline, isYoyo);\n      } else {\n        ease = child._ease;\n        child._ease = child._yEase;\n        child._yEase = ease;\n        child._yoyo = isYoyo;\n      }\n    }\n\n    child = child._next;\n  }\n},\n    _parseEase = function _parseEase(ease, defaultEase) {\n  return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\n},\n    _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\n  if (easeOut === void 0) {\n    easeOut = function easeOut(p) {\n      return 1 - easeIn(1 - p);\n    };\n  }\n\n  if (easeInOut === void 0) {\n    easeInOut = function easeInOut(p) {\n      return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\n    };\n  }\n\n  var ease = {\n    easeIn: easeIn,\n    easeOut: easeOut,\n    easeInOut: easeInOut\n  },\n      lowercaseName;\n\n  _forEachName(names, function (name) {\n    _easeMap[name] = _globals[name] = ease;\n    _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\n\n    for (var p in ease) {\n      _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\n    }\n  });\n\n  return ease;\n},\n    _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\n  return function (p) {\n    return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\n  };\n},\n    _configElastic = function _configElastic(type, amplitude, period) {\n  var p1 = amplitude >= 1 ? amplitude : 1,\n      //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n  p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\n      p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\n      easeOut = function easeOut(p) {\n    return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\n  },\n      ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n    return 1 - easeOut(1 - p);\n  } : _easeInOutFromOut(easeOut);\n\n  p2 = _2PI / p2; //precalculate to optimize\n\n  ease.config = function (amplitude, period) {\n    return _configElastic(type, amplitude, period);\n  };\n\n  return ease;\n},\n    _configBack = function _configBack(type, overshoot) {\n  if (overshoot === void 0) {\n    overshoot = 1.70158;\n  }\n\n  var easeOut = function easeOut(p) {\n    return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\n  },\n      ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n    return 1 - easeOut(1 - p);\n  } : _easeInOutFromOut(easeOut);\n\n  ease.config = function (overshoot) {\n    return _configBack(type, overshoot);\n  };\n\n  return ease;\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEase = ratio => {\n// \tlet y = 0.5 + ratio / 2;\n// \treturn p => (2 * (1 - p) * p * y + p * p);\n// },\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEaseStrong = ratio => {\n// \tratio = .5 + ratio / 2;\n// \tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\n// \t\tb = ratio - o,\n// \t\tc = ratio + o;\n// \treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\n// };\n\n\n_forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\n  var power = i < 5 ? i + 1 : i;\n\n  _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\n    return Math.pow(p, power);\n  } : function (p) {\n    return p;\n  }, function (p) {\n    return 1 - Math.pow(1 - p, power);\n  }, function (p) {\n    return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\n  });\n});\n\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\n\n_insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\n\n(function (n, c) {\n  var n1 = 1 / c,\n      n2 = 2 * n1,\n      n3 = 2.5 * n1,\n      easeOut = function easeOut(p) {\n    return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\n  };\n\n  _insertEase(\"Bounce\", function (p) {\n    return 1 - easeOut(1 - p);\n  }, easeOut);\n})(7.5625, 2.75);\n\n_insertEase(\"Expo\", function (p) {\n  return p ? Math.pow(2, 10 * (p - 1)) : 0;\n});\n\n_insertEase(\"Circ\", function (p) {\n  return -(_sqrt(1 - p * p) - 1);\n});\n\n_insertEase(\"Sine\", function (p) {\n  return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\n});\n\n_insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\n\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\n  config: function config(steps, immediateStart) {\n    if (steps === void 0) {\n      steps = 1;\n    }\n\n    var p1 = 1 / steps,\n        p2 = steps + (immediateStart ? 0 : 1),\n        p3 = immediateStart ? 1 : 0,\n        max = 1 - _tinyNum;\n    return function (p) {\n      return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\n    };\n  }\n};\n_defaults.ease = _easeMap[\"quad.out\"];\n\n_forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\n  return _callbackNames += name + \",\" + name + \"Params,\";\n});\n/*\n * --------------------------------------------------------------------------------------\n * CACHE\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var GSCache = function GSCache(target, harness) {\n  this.id = _gsID++;\n  target._gsap = this;\n  this.target = target;\n  this.harness = harness;\n  this.get = harness ? harness.get : _getProperty;\n  this.set = harness ? harness.getSetter : _getSetter;\n};\n/*\n * --------------------------------------------------------------------------------------\n * ANIMATION\n * --------------------------------------------------------------------------------------\n */\n\nexport var Animation = /*#__PURE__*/function () {\n  function Animation(vars) {\n    this.vars = vars;\n    this._delay = +vars.delay || 0;\n\n    if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\n      // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\n      this._rDelay = vars.repeatDelay || 0;\n      this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\n    }\n\n    this._ts = 1;\n\n    _setDuration(this, +vars.duration, 1, 1);\n\n    this.data = vars.data;\n\n    if (_context) {\n      this._ctx = _context;\n\n      _context.data.push(this);\n    }\n\n    _tickerActive || _ticker.wake();\n  }\n\n  var _proto = Animation.prototype;\n\n  _proto.delay = function delay(value) {\n    if (value || value === 0) {\n      this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\n      this._delay = value;\n      return this;\n    }\n\n    return this._delay;\n  };\n\n  _proto.duration = function duration(value) {\n    return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\n  };\n\n  _proto.totalDuration = function totalDuration(value) {\n    if (!arguments.length) {\n      return this._tDur;\n    }\n\n    this._dirty = 0;\n    return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\n  };\n\n  _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\n    _wake();\n\n    if (!arguments.length) {\n      return this._tTime;\n    }\n\n    var parent = this._dp;\n\n    if (parent && parent.smoothChildTiming && this._ts) {\n      _alignPlayhead(this, _totalTime);\n\n      !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\n      //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\n\n      while (parent && parent.parent) {\n        if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\n          parent.totalTime(parent._tTime, true);\n        }\n\n        parent = parent.parent;\n      }\n\n      if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\n        //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\n        _addToTimeline(this._dp, this, this._start - this._delay);\n      }\n    }\n\n    if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\n      // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\n      this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\n      //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\n      //   this._lock = 1;\n\n      _lazySafeRender(this, _totalTime, suppressEvents); //   this._lock = 0;\n      //}\n\n    }\n\n    return this;\n  };\n\n  _proto.time = function time(value, suppressEvents) {\n    return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\n  };\n\n  _proto.totalProgress = function totalProgress(value, suppressEvents) {\n    return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() > 0 ? 1 : 0;\n  };\n\n  _proto.progress = function progress(value, suppressEvents) {\n    return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;\n  };\n\n  _proto.iteration = function iteration(value, suppressEvents) {\n    var cycleDuration = this.duration() + this._rDelay;\n\n    return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\n  } // potential future addition:\n  // isPlayingBackwards() {\n  // \tlet animation = this,\n  // \t\torientation = 1; // 1 = forward, -1 = backward\n  // \twhile (animation) {\n  // \t\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\n  // \t\tanimation = animation.parent;\n  // \t}\n  // \treturn orientation < 0;\n  // }\n  ;\n\n  _proto.timeScale = function timeScale(value, suppressEvents) {\n    if (!arguments.length) {\n      return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\n    }\n\n    if (this._rts === value) {\n      return this;\n    }\n\n    var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\n    // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\n    //(+value < 0 && this._rts >= 0) && _callback(this, \"onReverse\", true);\n    // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\n\n    this._rts = +value || 0;\n    this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\n\n    this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), suppressEvents !== false);\n\n    _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\n\n\n    return _recacheAncestors(this);\n  };\n\n  _proto.paused = function paused(value) {\n    if (!arguments.length) {\n      return this._ps;\n    }\n\n    if (this._ps !== value) {\n      this._ps = value;\n\n      if (value) {\n        this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\n\n        this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \"real\" timeScale as _rts (recorded time scale)\n      } else {\n        _wake();\n\n        this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\n\n        this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\n      }\n    }\n\n    return this;\n  };\n\n  _proto.startTime = function startTime(value) {\n    if (arguments.length) {\n      this._start = value;\n      var parent = this.parent || this._dp;\n      parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\n      return this;\n    }\n\n    return this._start;\n  };\n\n  _proto.endTime = function endTime(includeRepeats) {\n    return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\n  };\n\n  _proto.rawTime = function rawTime(wrapRepeats) {\n    var parent = this.parent || this._dp; // _dp = detached parent\n\n    return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\n  };\n\n  _proto.revert = function revert(config) {\n    if (config === void 0) {\n      config = _revertConfig;\n    }\n\n    var prevIsReverting = _reverting;\n    _reverting = config;\n\n    if (this._initted || this._startAt) {\n      this.timeline && this.timeline.revert(config);\n      this.totalTime(-0.01, config.suppressEvents);\n    }\n\n    this.data !== \"nested\" && config.kill !== false && this.kill();\n    _reverting = prevIsReverting;\n    return this;\n  };\n\n  _proto.globalTime = function globalTime(rawTime) {\n    var animation = this,\n        time = arguments.length ? rawTime : animation.rawTime();\n\n    while (animation) {\n      time = animation._start + time / (Math.abs(animation._ts) || 1);\n      animation = animation._dp;\n    }\n\n    return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). \"_sat\" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().\n  };\n\n  _proto.repeat = function repeat(value) {\n    if (arguments.length) {\n      this._repeat = value === Infinity ? -2 : value;\n      return _onUpdateTotalDuration(this);\n    }\n\n    return this._repeat === -2 ? Infinity : this._repeat;\n  };\n\n  _proto.repeatDelay = function repeatDelay(value) {\n    if (arguments.length) {\n      var time = this._time;\n      this._rDelay = value;\n\n      _onUpdateTotalDuration(this);\n\n      return time ? this.time(time) : this;\n    }\n\n    return this._rDelay;\n  };\n\n  _proto.yoyo = function yoyo(value) {\n    if (arguments.length) {\n      this._yoyo = value;\n      return this;\n    }\n\n    return this._yoyo;\n  };\n\n  _proto.seek = function seek(position, suppressEvents) {\n    return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\n  };\n\n  _proto.restart = function restart(includeDelay, suppressEvents) {\n    return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\n  };\n\n  _proto.play = function play(from, suppressEvents) {\n    from != null && this.seek(from, suppressEvents);\n    return this.reversed(false).paused(false);\n  };\n\n  _proto.reverse = function reverse(from, suppressEvents) {\n    from != null && this.seek(from || this.totalDuration(), suppressEvents);\n    return this.reversed(true).paused(false);\n  };\n\n  _proto.pause = function pause(atTime, suppressEvents) {\n    atTime != null && this.seek(atTime, suppressEvents);\n    return this.paused(true);\n  };\n\n  _proto.resume = function resume() {\n    return this.paused(false);\n  };\n\n  _proto.reversed = function reversed(value) {\n    if (arguments.length) {\n      !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\n\n      return this;\n    }\n\n    return this._rts < 0;\n  };\n\n  _proto.invalidate = function invalidate() {\n    this._initted = this._act = 0;\n    this._zTime = -_tinyNum;\n    return this;\n  };\n\n  _proto.isActive = function isActive() {\n    var parent = this.parent || this._dp,\n        start = this._start,\n        rawTime;\n    return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\n  };\n\n  _proto.eventCallback = function eventCallback(type, callback, params) {\n    var vars = this.vars;\n\n    if (arguments.length > 1) {\n      if (!callback) {\n        delete vars[type];\n      } else {\n        vars[type] = callback;\n        params && (vars[type + \"Params\"] = params);\n        type === \"onUpdate\" && (this._onUpdate = callback);\n      }\n\n      return this;\n    }\n\n    return vars[type];\n  };\n\n  _proto.then = function then(onFulfilled) {\n    var self = this;\n    return new Promise(function (resolve) {\n      var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\n          _resolve = function _resolve() {\n        var _then = self.then;\n        self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\n\n        _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\n        resolve(f);\n        self.then = _then;\n      };\n\n      if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\n        _resolve();\n      } else {\n        self._prom = _resolve;\n      }\n    });\n  };\n\n  _proto.kill = function kill() {\n    _interrupt(this);\n  };\n\n  return Animation;\n}();\n\n_setDefaults(Animation.prototype, {\n  _time: 0,\n  _start: 0,\n  _end: 0,\n  _tTime: 0,\n  _tDur: 0,\n  _dirty: 0,\n  _repeat: 0,\n  _yoyo: false,\n  parent: null,\n  _initted: false,\n  _rDelay: 0,\n  _ts: 1,\n  _dp: 0,\n  ratio: 0,\n  _zTime: -_tinyNum,\n  _prom: 0,\n  _ps: false,\n  _rts: 1\n});\n/*\n * -------------------------------------------------\n * TIMELINE\n * -------------------------------------------------\n */\n\n\nexport var Timeline = /*#__PURE__*/function (_Animation) {\n  _inheritsLoose(Timeline, _Animation);\n\n  function Timeline(vars, position) {\n    var _this;\n\n    if (vars === void 0) {\n      vars = {};\n    }\n\n    _this = _Animation.call(this, vars) || this;\n    _this.labels = {};\n    _this.smoothChildTiming = !!vars.smoothChildTiming;\n    _this.autoRemoveChildren = !!vars.autoRemoveChildren;\n    _this._sort = _isNotFalse(vars.sortChildren);\n    _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\n    vars.reversed && _this.reverse();\n    vars.paused && _this.paused(true);\n    vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\n    return _this;\n  }\n\n  var _proto2 = Timeline.prototype;\n\n  _proto2.to = function to(targets, vars, position) {\n    _createTweenType(0, arguments, this);\n\n    return this;\n  };\n\n  _proto2.from = function from(targets, vars, position) {\n    _createTweenType(1, arguments, this);\n\n    return this;\n  };\n\n  _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\n    _createTweenType(2, arguments, this);\n\n    return this;\n  };\n\n  _proto2.set = function set(targets, vars, position) {\n    vars.duration = 0;\n    vars.parent = this;\n    _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\n    vars.immediateRender = !!vars.immediateRender;\n    new Tween(targets, vars, _parsePosition(this, position), 1);\n    return this;\n  };\n\n  _proto2.call = function call(callback, params, position) {\n    return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\n  } //ONLY for backward compatibility! Maybe delete?\n  ;\n\n  _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    vars.duration = duration;\n    vars.stagger = vars.stagger || stagger;\n    vars.onComplete = onCompleteAll;\n    vars.onCompleteParams = onCompleteAllParams;\n    vars.parent = this;\n    new Tween(targets, vars, _parsePosition(this, position));\n    return this;\n  };\n\n  _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    vars.runBackwards = 1;\n    _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\n    return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\n  };\n\n  _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    toVars.startAt = fromVars;\n    _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\n    return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\n  };\n\n  _proto2.render = function render(totalTime, suppressEvents, force) {\n    var prevTime = this._time,\n        tDur = this._dirty ? this.totalDuration() : this._tDur,\n        dur = this._dur,\n        tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\n        // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\n    crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\n        time,\n        child,\n        next,\n        iteration,\n        cycleDuration,\n        prevPaused,\n        pauseTween,\n        timeScale,\n        prevStart,\n        prevIteration,\n        yoyo,\n        isYoyo;\n    this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\n\n    if (tTime !== this._tTime || force || crossingStart) {\n      if (prevTime !== this._time && dur) {\n        //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n        tTime += this._time - prevTime;\n        totalTime += this._time - prevTime;\n      }\n\n      time = tTime;\n      prevStart = this._start;\n      timeScale = this._ts;\n      prevPaused = !timeScale;\n\n      if (crossingStart) {\n        dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n        (totalTime || !suppressEvents) && (this._zTime = totalTime);\n      }\n\n      if (this._repeat) {\n        //adjust the time for repeats and yoyos\n        yoyo = this._yoyo;\n        cycleDuration = dur + this._rDelay;\n\n        if (this._repeat < -1 && totalTime < 0) {\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n        }\n\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n        if (tTime === tDur) {\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n          iteration = this._repeat;\n          time = dur;\n        } else {\n          iteration = ~~(tTime / cycleDuration);\n\n          if (iteration && iteration === tTime / cycleDuration) {\n            time = dur;\n            iteration--;\n          }\n\n          time > dur && (time = dur);\n        }\n\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\n        !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://gsap.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the \"repeatDelay\" portion\n\n        if (yoyo && iteration & 1) {\n          time = dur - time;\n          isYoyo = 1;\n        }\n        /*\n        make sure children at the end/beginning of the timeline are rendered properly. If, for example,\n        a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n        would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n        could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n        we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n        ensure that zero-duration tweens at the very beginning or end of the Timeline work.\n        */\n\n\n        if (iteration !== prevIteration && !this._lock) {\n          var rewinding = yoyo && prevIteration & 1,\n              doesWrap = rewinding === (yoyo && iteration & 1);\n          iteration < prevIteration && (rewinding = !rewinding);\n          prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time.\n\n          this._lock = 1;\n          this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\n          this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\n\n          !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n          this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\n\n          if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\n            // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\n            return this;\n          }\n\n          dur = this._dur; // in case the duration changed in the onRepeat\n\n          tDur = this._tDur;\n\n          if (doesWrap) {\n            this._lock = 2;\n            prevTime = rewinding ? dur : -0.0001;\n            this.render(prevTime, true);\n            this.vars.repeatRefresh && !isYoyo && this.invalidate();\n          }\n\n          this._lock = 0;\n\n          if (!this._ts && !prevPaused) {\n            return this;\n          } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\n\n\n          _propagateYoyoEase(this, isYoyo);\n        }\n      }\n\n      if (this._hasPause && !this._forcing && this._lock < 2) {\n        pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\n\n        if (pauseTween) {\n          tTime -= time - (time = pauseTween._start);\n        }\n      }\n\n      this._tTime = tTime;\n      this._time = time;\n      this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n      if (!this._initted) {\n        this._onUpdate = this.vars.onUpdate;\n        this._initted = 1;\n        this._zTime = totalTime;\n        prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\n      }\n\n      if (!prevTime && time && !suppressEvents && !iteration) {\n        _callback(this, \"onStart\");\n\n        if (this._tTime !== tTime) {\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n          return this;\n        }\n      }\n\n      if (time >= prevTime && totalTime >= 0) {\n        child = this._first;\n\n        while (child) {\n          next = child._next;\n\n          if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\n            if (child.parent !== this) {\n              // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n              return this.render(totalTime, suppressEvents, force);\n            }\n\n            child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\n\n            if (time !== this._time || !this._ts && !prevPaused) {\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n              pauseTween = 0;\n              next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n              break;\n            }\n          }\n\n          child = next;\n        }\n      } else {\n        child = this._last;\n        var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\n\n        while (child) {\n          next = child._prev;\n\n          if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\n            if (child.parent !== this) {\n              // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n              return this.render(totalTime, suppressEvents, force);\n            }\n\n            child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.\n\n            if (time !== this._time || !this._ts && !prevPaused) {\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n              pauseTween = 0;\n              next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n              break;\n            }\n          }\n\n          child = next;\n        }\n      }\n\n      if (pauseTween && !suppressEvents) {\n        this.pause();\n        pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\n\n        if (this._ts) {\n          //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\n          this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\n\n          _setEnd(this);\n\n          return this.render(totalTime, suppressEvents, force);\n        }\n      }\n\n      this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\n      if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\n        // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.\n        (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n        if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\n          _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\n\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n        }\n      }\n    }\n\n    return this;\n  };\n\n  _proto2.add = function add(child, position) {\n    var _this2 = this;\n\n    _isNumber(position) || (position = _parsePosition(this, position, child));\n\n    if (!(child instanceof Animation)) {\n      if (_isArray(child)) {\n        child.forEach(function (obj) {\n          return _this2.add(obj, position);\n        });\n        return this;\n      }\n\n      if (_isString(child)) {\n        return this.addLabel(child, position);\n      }\n\n      if (_isFunction(child)) {\n        child = Tween.delayedCall(0, child);\n      } else {\n        return this;\n      }\n    }\n\n    return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\n  };\n\n  _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\n    if (nested === void 0) {\n      nested = true;\n    }\n\n    if (tweens === void 0) {\n      tweens = true;\n    }\n\n    if (timelines === void 0) {\n      timelines = true;\n    }\n\n    if (ignoreBeforeTime === void 0) {\n      ignoreBeforeTime = -_bigNum;\n    }\n\n    var a = [],\n        child = this._first;\n\n    while (child) {\n      if (child._start >= ignoreBeforeTime) {\n        if (child instanceof Tween) {\n          tweens && a.push(child);\n        } else {\n          timelines && a.push(child);\n          nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\n        }\n      }\n\n      child = child._next;\n    }\n\n    return a;\n  };\n\n  _proto2.getById = function getById(id) {\n    var animations = this.getChildren(1, 1, 1),\n        i = animations.length;\n\n    while (i--) {\n      if (animations[i].vars.id === id) {\n        return animations[i];\n      }\n    }\n  };\n\n  _proto2.remove = function remove(child) {\n    if (_isString(child)) {\n      return this.removeLabel(child);\n    }\n\n    if (_isFunction(child)) {\n      return this.killTweensOf(child);\n    }\n\n    _removeLinkedListItem(this, child);\n\n    if (child === this._recent) {\n      this._recent = this._last;\n    }\n\n    return _uncache(this);\n  };\n\n  _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\n    if (!arguments.length) {\n      return this._tTime;\n    }\n\n    this._forcing = 1;\n\n    if (!this._dp && this._ts) {\n      //special case for the global timeline (or any other that has no parent or detached parent).\n      this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\n    }\n\n    _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\n\n    this._forcing = 0;\n    return this;\n  };\n\n  _proto2.addLabel = function addLabel(label, position) {\n    this.labels[label] = _parsePosition(this, position);\n    return this;\n  };\n\n  _proto2.removeLabel = function removeLabel(label) {\n    delete this.labels[label];\n    return this;\n  };\n\n  _proto2.addPause = function addPause(position, callback, params) {\n    var t = Tween.delayedCall(0, callback || _emptyFunc, params);\n    t.data = \"isPause\";\n    this._hasPause = 1;\n    return _addToTimeline(this, t, _parsePosition(this, position));\n  };\n\n  _proto2.removePause = function removePause(position) {\n    var child = this._first;\n    position = _parsePosition(this, position);\n\n    while (child) {\n      if (child._start === position && child.data === \"isPause\") {\n        _removeFromParent(child);\n      }\n\n      child = child._next;\n    }\n  };\n\n  _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n    var tweens = this.getTweensOf(targets, onlyActive),\n        i = tweens.length;\n\n    while (i--) {\n      _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\n    }\n\n    return this;\n  };\n\n  _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\n    var a = [],\n        parsedTargets = toArray(targets),\n        child = this._first,\n        isGlobalTime = _isNumber(onlyActive),\n        // a number is interpreted as a global time. If the animation spans\n    children;\n\n    while (child) {\n      if (child instanceof Tween) {\n        if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\n          // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\n          a.push(child);\n        }\n      } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\n        a.push.apply(a, children);\n      }\n\n      child = child._next;\n    }\n\n    return a;\n  } // potential future feature - targets() on timelines\n  // targets() {\n  // \tlet result = [];\n  // \tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\n  // \treturn result.filter((v, i) => result.indexOf(v) === i);\n  // }\n  ;\n\n  _proto2.tweenTo = function tweenTo(position, vars) {\n    vars = vars || {};\n\n    var tl = this,\n        endTime = _parsePosition(tl, position),\n        _vars = vars,\n        startAt = _vars.startAt,\n        _onStart = _vars.onStart,\n        onStartParams = _vars.onStartParams,\n        immediateRender = _vars.immediateRender,\n        initted,\n        tween = Tween.to(tl, _setDefaults({\n      ease: vars.ease || \"none\",\n      lazy: false,\n      immediateRender: false,\n      time: endTime,\n      overwrite: \"auto\",\n      duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\n      onStart: function onStart() {\n        tl.pause();\n\n        if (!initted) {\n          var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\n          tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\n          initted = 1;\n        }\n\n        _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\n      }\n    }, vars));\n\n    return immediateRender ? tween.render(0) : tween;\n  };\n\n  _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\n    return this.tweenTo(toPosition, _setDefaults({\n      startAt: {\n        time: _parsePosition(this, fromPosition)\n      }\n    }, vars));\n  };\n\n  _proto2.recent = function recent() {\n    return this._recent;\n  };\n\n  _proto2.nextLabel = function nextLabel(afterTime) {\n    if (afterTime === void 0) {\n      afterTime = this._time;\n    }\n\n    return _getLabelInDirection(this, _parsePosition(this, afterTime));\n  };\n\n  _proto2.previousLabel = function previousLabel(beforeTime) {\n    if (beforeTime === void 0) {\n      beforeTime = this._time;\n    }\n\n    return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\n  };\n\n  _proto2.currentLabel = function currentLabel(value) {\n    return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\n  };\n\n  _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\n    if (ignoreBeforeTime === void 0) {\n      ignoreBeforeTime = 0;\n    }\n\n    var child = this._first,\n        labels = this.labels,\n        p;\n\n    while (child) {\n      if (child._start >= ignoreBeforeTime) {\n        child._start += amount;\n        child._end += amount;\n      }\n\n      child = child._next;\n    }\n\n    if (adjustLabels) {\n      for (p in labels) {\n        if (labels[p] >= ignoreBeforeTime) {\n          labels[p] += amount;\n        }\n      }\n    }\n\n    return _uncache(this);\n  };\n\n  _proto2.invalidate = function invalidate(soft) {\n    var child = this._first;\n    this._lock = 0;\n\n    while (child) {\n      child.invalidate(soft);\n      child = child._next;\n    }\n\n    return _Animation.prototype.invalidate.call(this, soft);\n  };\n\n  _proto2.clear = function clear(includeLabels) {\n    if (includeLabels === void 0) {\n      includeLabels = true;\n    }\n\n    var child = this._first,\n        next;\n\n    while (child) {\n      next = child._next;\n      this.remove(child);\n      child = next;\n    }\n\n    this._dp && (this._time = this._tTime = this._pTime = 0);\n    includeLabels && (this.labels = {});\n    return _uncache(this);\n  };\n\n  _proto2.totalDuration = function totalDuration(value) {\n    var max = 0,\n        self = this,\n        child = self._last,\n        prevStart = _bigNum,\n        prev,\n        start,\n        parent;\n\n    if (arguments.length) {\n      return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\n    }\n\n    if (self._dirty) {\n      parent = self.parent;\n\n      while (child) {\n        prev = child._prev; //record it here in case the tween changes position in the sequence...\n\n        child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\n\n        start = child._start;\n\n        if (start > prevStart && self._sort && child._ts && !self._lock) {\n          //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n          self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\n\n          _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\n        } else {\n          prevStart = start;\n        }\n\n        if (start < 0 && child._ts) {\n          //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n          max -= start;\n\n          if (!parent && !self._dp || parent && parent.smoothChildTiming) {\n            self._start += start / self._ts;\n            self._time -= start;\n            self._tTime -= start;\n          }\n\n          self.shiftChildren(-start, false, -1e999);\n          prevStart = 0;\n        }\n\n        child._end > max && child._ts && (max = child._end);\n        child = prev;\n      }\n\n      _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\n\n      self._dirty = 0;\n    }\n\n    return self._tDur;\n  };\n\n  Timeline.updateRoot = function updateRoot(time) {\n    if (_globalTimeline._ts) {\n      _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\n\n      _lastRenderedFrame = _ticker.frame;\n    }\n\n    if (_ticker.frame >= _nextGCFrame) {\n      _nextGCFrame += _config.autoSleep || 120;\n      var child = _globalTimeline._first;\n      if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\n        while (child && !child._ts) {\n          child = child._next;\n        }\n\n        child || _ticker.sleep();\n      }\n    }\n  };\n\n  return Timeline;\n}(Animation);\n\n_setDefaults(Timeline.prototype, {\n  _lock: 0,\n  _hasPause: 0,\n  _forcing: 0\n});\n\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\n  //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n  var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\n      index = 0,\n      matchIndex = 0,\n      result,\n      startNums,\n      color,\n      endNum,\n      chunk,\n      startNum,\n      hasRandom,\n      a;\n  pt.b = start;\n  pt.e = end;\n  start += \"\"; //ensure values are strings\n\n  end += \"\";\n\n  if (hasRandom = ~end.indexOf(\"random(\")) {\n    end = _replaceRandom(end);\n  }\n\n  if (stringFilter) {\n    a = [start, end];\n    stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\n    start = a[0];\n    end = a[1];\n  }\n\n  startNums = start.match(_complexStringNumExp) || [];\n\n  while (result = _complexStringNumExp.exec(end)) {\n    endNum = result[0];\n    chunk = end.substring(index, result.index);\n\n    if (color) {\n      color = (color + 1) % 5;\n    } else if (chunk.substr(-5) === \"rgba(\") {\n      color = 1;\n    }\n\n    if (endNum !== startNums[matchIndex++]) {\n      startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n      pt._pt = {\n        _next: pt._pt,\n        p: chunk || matchIndex === 1 ? chunk : \",\",\n        //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n        s: startNum,\n        c: endNum.charAt(1) === \"=\" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,\n        m: color && color < 4 ? Math.round : 0\n      };\n      index = _complexStringNumExp.lastIndex;\n    }\n  }\n\n  pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n\n  pt.fp = funcParam;\n\n  if (_relExp.test(end) || hasRandom) {\n    pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n  }\n\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n\n  return pt;\n},\n    _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {\n  _isFunction(end) && (end = end(index || 0, target, targets));\n  var currentValue = target[prop],\n      parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\n      setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\n      pt;\n\n  if (_isString(end)) {\n    if (~end.indexOf(\"random(\")) {\n      end = _replaceRandom(end);\n    }\n\n    if (end.charAt(1) === \"=\") {\n      pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);\n\n      if (pt || pt === 0) {\n        // to avoid isNaN, like if someone passes in a value like \"!= whatever\"\n        end = pt;\n      }\n    }\n  }\n\n  if (!optional || parsedStart !== end || _forceAllPropTweens) {\n    if (!isNaN(parsedStart * end) && end !== \"\") {\n      // fun fact: any number multiplied by \"\" is evaluated as the number 0!\n      pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\n      funcParam && (pt.fp = funcParam);\n      modifier && pt.modifier(modifier, this, target);\n      return this._pt = pt;\n    }\n\n    !currentValue && !(prop in target) && _missingPlugin(prop, end);\n    return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\n  }\n},\n    //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \"random()\" in them. It does NOT process relative values.\n_processVars = function _processVars(vars, index, target, targets, tween) {\n  _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\n\n  if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\n    return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\n  }\n\n  var copy = {},\n      p;\n\n  for (p in vars) {\n    copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\n  }\n\n  return copy;\n},\n    _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\n  var plugin, pt, ptLookup, i;\n\n  if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\n    tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n    if (tween !== _quickTween) {\n      ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\n\n      i = plugin._props.length;\n\n      while (i--) {\n        ptLookup[plugin._props[i]] = pt;\n      }\n    }\n  }\n\n  return plugin;\n},\n    _overwritingTween,\n    //store a reference temporarily so we can avoid overwriting itself.\n_forceAllPropTweens,\n    _initTween = function _initTween(tween, time, tTime) {\n  var vars = tween.vars,\n      ease = vars.ease,\n      startAt = vars.startAt,\n      immediateRender = vars.immediateRender,\n      lazy = vars.lazy,\n      onUpdate = vars.onUpdate,\n      runBackwards = vars.runBackwards,\n      yoyoEase = vars.yoyoEase,\n      keyframes = vars.keyframes,\n      autoRevert = vars.autoRevert,\n      dur = tween._dur,\n      prevStartAt = tween._startAt,\n      targets = tween._targets,\n      parent = tween.parent,\n      fullTargets = parent && parent.data === \"nested\" ? parent.vars.targets : targets,\n      autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\n      tl = tween.timeline,\n      cleanVars,\n      i,\n      p,\n      pt,\n      target,\n      hasPriority,\n      gsData,\n      harness,\n      plugin,\n      ptLookup,\n      index,\n      harnessVars,\n      overwritten;\n  tl && (!keyframes || !ease) && (ease = \"none\");\n  tween._ease = _parseEase(ease, _defaults.ease);\n  tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\n\n  if (yoyoEase && tween._yoyo && !tween._repeat) {\n    //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\n    yoyoEase = tween._yEase;\n    tween._yEase = tween._ease;\n    tween._ease = yoyoEase;\n  }\n\n  tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\n\n  if (!tl || keyframes && !vars.stagger) {\n    //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\n    harness = targets[0] ? _getCache(targets[0]).harness : 0;\n    harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \"x\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\n\n    cleanVars = _copyExcluding(vars, _reservedProps);\n\n    if (prevStartAt) {\n      prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.\n\n      time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a \"startAt\" (not \"from()\" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)\n      // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for \"startAt\" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.\n\n      prevStartAt._lazy = 0;\n    }\n\n    if (startAt) {\n      _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\n        data: \"isStart\",\n        overwrite: false,\n        parent: parent,\n        immediateRender: true,\n        lazy: !prevStartAt && _isNotFalse(lazy),\n        startAt: null,\n        delay: 0,\n        onUpdate: onUpdate && function () {\n          return _callback(tween, \"onUpdate\");\n        },\n        stagger: 0\n      }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\n\n\n      tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.\n\n      tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween\n\n      time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\n\n      if (immediateRender) {\n        if (dur && time <= 0 && tTime <= 0) {\n          // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.\n          time && (tween._zTime = time);\n          return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n        }\n      }\n    } else if (runBackwards && dur) {\n      //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n      if (!prevStartAt) {\n        time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\n        p = _setDefaults({\n          overwrite: false,\n          data: \"isFromStart\",\n          //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n          lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),\n          immediateRender: immediateRender,\n          //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n          stagger: 0,\n          parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\".class\", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})\n\n        }, cleanVars);\n        harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\n\n        _removeFromParent(tween._startAt = Tween.set(targets, p));\n\n        tween._startAt._dp = 0; // don't allow it to get put back into root timeline!\n\n        tween._startAt._sat = tween; // used in globalTime()\n\n        time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));\n        tween._zTime = time;\n\n        if (!immediateRender) {\n          _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded\n\n        } else if (!time) {\n          return;\n        }\n      }\n    }\n\n    tween._pt = tween._ptCache = 0;\n    lazy = dur && _isNotFalse(lazy) || lazy && !dur;\n\n    for (i = 0; i < targets.length; i++) {\n      target = targets[i];\n      gsData = target._gsap || _harness(targets)[i]._gsap;\n      tween._ptLookup[i] = ptLookup = {};\n      _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\n      index = fullTargets === targets ? i : fullTargets.indexOf(target);\n\n      if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\n        tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n        plugin._props.forEach(function (name) {\n          ptLookup[name] = pt;\n        });\n\n        plugin.priority && (hasPriority = 1);\n      }\n\n      if (!harness || harnessVars) {\n        for (p in cleanVars) {\n          if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\n            plugin.priority && (hasPriority = 1);\n          } else {\n            ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\n          }\n        }\n      }\n\n      tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\n\n      if (autoOverwrite && tween._pt) {\n        _overwritingTween = tween;\n\n        _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\n\n\n        overwritten = !tween.parent;\n        _overwritingTween = 0;\n      }\n\n      tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\n    }\n\n    hasPriority && _sortPropTweensByPriority(tween);\n    tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\n  }\n\n  tween._onUpdate = onUpdate;\n  tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\n\n  keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the \"before\" state for any staggered/delayed animations thus when the following tween initializes, it'll use the \"before\" state instead of the \"after\" state as the initial values.\n},\n    _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {\n  var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],\n      pt,\n      rootPT,\n      lookup,\n      i;\n\n  if (!ptCache) {\n    ptCache = tween._ptCache[property] = [];\n    lookup = tween._ptLookup;\n    i = tween._targets.length;\n\n    while (i--) {\n      pt = lookup[i][property];\n\n      if (pt && pt.d && pt.d._pt) {\n        // it's a plugin, so find the nested PropTween\n        pt = pt.d._pt;\n\n        while (pt && pt.p !== property && pt.fp !== property) {\n          // \"fp\" is functionParam for things like setting CSS variables which require .setProperty(\"--var-name\", value)\n          pt = pt._next;\n        }\n      }\n\n      if (!pt) {\n        // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this\n        // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo(\"x\", 200) for example.\n        _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.\n\n        tween.vars[property] = \"+=0\";\n\n        _initTween(tween, time);\n\n        _forceAllPropTweens = 0;\n        return skipRecursion ? _warn(property + \" not eligible for reset\") : 1; // if someone tries to do a quickTo() on a special property like borderRadius which must get split into 4 different properties, that's not eligible for .resetTo().\n      }\n\n      ptCache.push(pt);\n    }\n  }\n\n  i = ptCache.length;\n\n  while (i--) {\n    rootPT = ptCache[i];\n    pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.\n\n    pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;\n    pt.c = value - pt.s;\n    rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)\n\n    rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)\n  }\n},\n    _addAliasesToVars = function _addAliasesToVars(targets, vars) {\n  var harness = targets[0] ? _getCache(targets[0]).harness : 0,\n      propertyAliases = harness && harness.aliases,\n      copy,\n      p,\n      i,\n      aliases;\n\n  if (!propertyAliases) {\n    return vars;\n  }\n\n  copy = _merge({}, vars);\n\n  for (p in propertyAliases) {\n    if (p in copy) {\n      aliases = propertyAliases[p].split(\",\");\n      i = aliases.length;\n\n      while (i--) {\n        copy[aliases[i]] = copy[p];\n      }\n    }\n  }\n\n  return copy;\n},\n    // parses multiple formats, like {\"0%\": {x: 100}, {\"50%\": {x: -20}} and { x: {\"0%\": 100, \"50%\": -20} }, and an \"ease\" can be set on any object. We populate an \"allProps\" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a \"t\" (time), \"v\", (value), and \"e\" (ease) property. This allows us to piece together a timeline later.\n_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\n  var ease = obj.ease || easeEach || \"power1.inOut\",\n      p,\n      a;\n\n  if (_isArray(obj)) {\n    a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease\n\n    obj.forEach(function (value, i) {\n      return a.push({\n        t: i / (obj.length - 1) * 100,\n        v: value,\n        e: ease\n      });\n    });\n  } else {\n    for (p in obj) {\n      a = allProps[p] || (allProps[p] = []);\n      p === \"ease\" || a.push({\n        t: parseFloat(prop),\n        v: obj[p],\n        e: ease\n      });\n    }\n  }\n},\n    _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\n  return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\n},\n    _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert\",\n    _staggerPropsToSkip = {};\n\n_forEachName(_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\", function (name) {\n  return _staggerPropsToSkip[name] = 1;\n});\n/*\n * --------------------------------------------------------------------------------------\n * TWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var Tween = /*#__PURE__*/function (_Animation2) {\n  _inheritsLoose(Tween, _Animation2);\n\n  function Tween(targets, vars, position, skipInherit) {\n    var _this3;\n\n    if (typeof vars === \"number\") {\n      position.duration = vars;\n      vars = position;\n      position = null;\n    }\n\n    _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\n    var _this3$vars = _this3.vars,\n        duration = _this3$vars.duration,\n        delay = _this3$vars.delay,\n        immediateRender = _this3$vars.immediateRender,\n        stagger = _this3$vars.stagger,\n        overwrite = _this3$vars.overwrite,\n        keyframes = _this3$vars.keyframes,\n        defaults = _this3$vars.defaults,\n        scrollTrigger = _this3$vars.scrollTrigger,\n        yoyoEase = _this3$vars.yoyoEase,\n        parent = vars.parent || _globalTimeline,\n        parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\n        tl,\n        i,\n        copy,\n        l,\n        p,\n        curTarget,\n        staggerFunc,\n        staggerVarsToMerge;\n    _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://gsap.com\", !_config.nullTargetWarn) || [];\n    _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\n\n    _this3._overwrite = overwrite;\n\n    if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n      vars = _this3.vars;\n      tl = _this3.timeline = new Timeline({\n        data: \"nested\",\n        defaults: defaults || {},\n        targets: parent && parent.data === \"nested\" ? parent.vars.targets : parsedTargets\n      }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.\n\n      tl.kill();\n      tl.parent = tl._dp = _assertThisInitialized(_this3);\n      tl._start = 0;\n\n      if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n        l = parsedTargets.length;\n        staggerFunc = stagger && distribute(stagger);\n\n        if (_isObject(stagger)) {\n          //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\n          for (p in stagger) {\n            if (~_staggerTweenProps.indexOf(p)) {\n              staggerVarsToMerge || (staggerVarsToMerge = {});\n              staggerVarsToMerge[p] = stagger[p];\n            }\n          }\n        }\n\n        for (i = 0; i < l; i++) {\n          copy = _copyExcluding(vars, _staggerPropsToSkip);\n          copy.stagger = 0;\n          yoyoEase && (copy.yoyoEase = yoyoEase);\n          staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\n          curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\n\n          copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\n          copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\n\n          if (!stagger && l === 1 && copy.delay) {\n            // if someone does delay:\"random(1, 5)\", repeat:-1, for example, the delay shouldn't be inside the repeat.\n            _this3._delay = delay = copy.delay;\n            _this3._start += delay;\n            copy.delay = 0;\n          }\n\n          tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\n          tl._ease = _easeMap.none;\n        }\n\n        tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\n      } else if (keyframes) {\n        _inheritDefaults(_setDefaults(tl.vars.defaults, {\n          ease: \"none\"\n        }));\n\n        tl._ease = _parseEase(keyframes.ease || vars.ease || \"none\");\n        var time = 0,\n            a,\n            kf,\n            v;\n\n        if (_isArray(keyframes)) {\n          keyframes.forEach(function (frame) {\n            return tl.to(parsedTargets, frame, \">\");\n          });\n          tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.\n        } else {\n          copy = {};\n\n          for (p in keyframes) {\n            p === \"ease\" || p === \"easeEach\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\n          }\n\n          for (p in copy) {\n            a = copy[p].sort(function (a, b) {\n              return a.t - b.t;\n            });\n            time = 0;\n\n            for (i = 0; i < a.length; i++) {\n              kf = a[i];\n              v = {\n                ease: kf.e,\n                duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\n              };\n              v[p] = kf.v;\n              tl.to(parsedTargets, v, time);\n              time += v.duration;\n            }\n          }\n\n          tl.duration() < duration && tl.to({}, {\n            duration: duration - tl.duration()\n          }); // in case keyframes didn't go to 100%\n        }\n      }\n\n      duration || _this3.duration(duration = tl.duration());\n    } else {\n      _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\n    }\n\n    if (overwrite === true && !_suppressOverwrites) {\n      _overwritingTween = _assertThisInitialized(_this3);\n\n      _globalTimeline.killTweensOf(parsedTargets);\n\n      _overwritingTween = 0;\n    }\n\n    _addToTimeline(parent, _assertThisInitialized(_this3), position);\n\n    vars.reversed && _this3.reverse();\n    vars.paused && _this3.paused(true);\n\n    if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\n      _this3._tTime = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\n      _this3.render(Math.max(0, -delay) || 0); //in case delay is negative\n\n    }\n\n    scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\n    return _this3;\n  }\n\n  var _proto3 = Tween.prototype;\n\n  _proto3.render = function render(totalTime, suppressEvents, force) {\n    var prevTime = this._time,\n        tDur = this._tDur,\n        dur = this._dur,\n        isNegative = totalTime < 0,\n        tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,\n        time,\n        pt,\n        iteration,\n        cycleDuration,\n        prevIteration,\n        isYoyo,\n        ratio,\n        timeline,\n        yoyoEase;\n\n    if (!dur) {\n      _renderZeroDurationTween(this, totalTime, suppressEvents, force);\n    } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) {\n      //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\n      time = tTime;\n      timeline = this.timeline;\n\n      if (this._repeat) {\n        //adjust the time for repeats and yoyos\n        cycleDuration = dur + this._rDelay;\n\n        if (this._repeat < -1 && isNegative) {\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n        }\n\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n        if (tTime === tDur) {\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n          iteration = this._repeat;\n          time = dur;\n        } else {\n          iteration = ~~(tTime / cycleDuration);\n\n          if (iteration && iteration === _roundPrecise(tTime / cycleDuration)) {\n            time = dur;\n            iteration--;\n          }\n\n          time > dur && (time = dur);\n        }\n\n        isYoyo = this._yoyo && iteration & 1;\n\n        if (isYoyo) {\n          yoyoEase = this._yEase;\n          time = dur - time;\n        }\n\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\n\n        if (time === prevTime && !force && this._initted && iteration === prevIteration) {\n          //could be during the repeatDelay part. No need to render and fire callbacks.\n          this._tTime = tTime;\n          return this;\n        }\n\n        if (iteration !== prevIteration) {\n          timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\n\n          if (this.vars.repeatRefresh && !isYoyo && !this._lock && this._time !== cycleDuration && this._initted) {\n            // this._time will === cycleDuration when we render at EXACTLY the end of an iteration. Without this condition, it'd often do the repeatRefresh render TWICE (again on the very next tick).\n            this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\n\n            this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\n          }\n        }\n      }\n\n      if (!this._initted) {\n        if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {\n          this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\n\n          return this;\n        }\n\n        if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {\n          // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. But we also don't want to dump if we're doing a repeatRefresh render!\n          return this;\n        }\n\n        if (dur !== this._dur) {\n          // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\n          return this.render(totalTime, suppressEvents, force);\n        }\n      }\n\n      this._tTime = tTime;\n      this._time = time;\n\n      if (!this._act && this._ts) {\n        this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n        this._lazy = 0;\n      }\n\n      this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\n\n      if (this._from) {\n        this.ratio = ratio = 1 - ratio;\n      }\n\n      if (time && !prevTime && !suppressEvents && !iteration) {\n        _callback(this, \"onStart\");\n\n        if (this._tTime !== tTime) {\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n          return this;\n        }\n      }\n\n      pt = this._pt;\n\n      while (pt) {\n        pt.r(ratio, pt.d);\n        pt = pt._next;\n      }\n\n      timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\n\n      if (this._onUpdate && !suppressEvents) {\n        isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\n        _callback(this, \"onUpdate\");\n      }\n\n      this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n\n      if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\n        isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);\n        (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n        if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {\n          // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\n          _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\n\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n        }\n      }\n    }\n\n    return this;\n  };\n\n  _proto3.targets = function targets() {\n    return this._targets;\n  };\n\n  _proto3.invalidate = function invalidate(soft) {\n    // \"soft\" gives us a way to clear out everything EXCEPT the recorded pre-\"from\" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the \"from\" values would persist and then on the next render, the from() tweens would initialize and the current value would match the \"from\" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.\n    (!soft || !this.vars.runBackwards) && (this._startAt = 0);\n    this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;\n    this._ptLookup = [];\n    this.timeline && this.timeline.invalidate(soft);\n    return _Animation2.prototype.invalidate.call(this, soft);\n  };\n\n  _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {\n    _tickerActive || _ticker.wake();\n    this._ts || this.play();\n    var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),\n        ratio;\n    this._initted || _initTween(this, time);\n    ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.\n    // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.\n    // if (_isObject(property)) { // performance optimization\n    // \tfor (p in property) {\n    // \t\tif (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {\n    // \t\t\treturn this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n    // \t\t}\n    // \t}\n    // } else {\n\n    if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {\n      return this.resetTo(property, value, start, startIsRelative, 1); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n    } //}\n\n\n    _alignPlayhead(this, 0);\n\n    this.parent || _addLinkedListItem(this._dp, this, \"_first\", \"_last\", this._dp._sort ? \"_start\" : 0);\n    return this.render(0);\n  };\n\n  _proto3.kill = function kill(targets, vars) {\n    if (vars === void 0) {\n      vars = \"all\";\n    }\n\n    if (!targets && (!vars || vars === \"all\")) {\n      this._lazy = this._pt = 0;\n      return this.parent ? _interrupt(this) : this;\n    }\n\n    if (this.timeline) {\n      var tDur = this.timeline.totalDuration();\n      this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\n\n      this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\n\n      return this;\n    }\n\n    var parsedTargets = this._targets,\n        killingTargets = targets ? toArray(targets) : parsedTargets,\n        propTweenLookup = this._ptLookup,\n        firstPT = this._pt,\n        overwrittenProps,\n        curLookup,\n        curOverwriteProps,\n        props,\n        p,\n        pt,\n        i;\n\n    if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\n      vars === \"all\" && (this._pt = 0);\n      return _interrupt(this);\n    }\n\n    overwrittenProps = this._op = this._op || [];\n\n    if (vars !== \"all\") {\n      //so people can pass in a comma-delimited list of property names\n      if (_isString(vars)) {\n        p = {};\n\n        _forEachName(vars, function (name) {\n          return p[name] = 1;\n        });\n\n        vars = p;\n      }\n\n      vars = _addAliasesToVars(parsedTargets, vars);\n    }\n\n    i = parsedTargets.length;\n\n    while (i--) {\n      if (~killingTargets.indexOf(parsedTargets[i])) {\n        curLookup = propTweenLookup[i];\n\n        if (vars === \"all\") {\n          overwrittenProps[i] = vars;\n          props = curLookup;\n          curOverwriteProps = {};\n        } else {\n          curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\n          props = vars;\n        }\n\n        for (p in props) {\n          pt = curLookup && curLookup[p];\n\n          if (pt) {\n            if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\n              _removeLinkedListItem(this, pt, \"_pt\");\n            }\n\n            delete curLookup[p];\n          }\n\n          if (curOverwriteProps !== \"all\") {\n            curOverwriteProps[p] = 1;\n          }\n        }\n      }\n    }\n\n    this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\n    return this;\n  };\n\n  Tween.to = function to(targets, vars) {\n    return new Tween(targets, vars, arguments[2]);\n  };\n\n  Tween.from = function from(targets, vars) {\n    return _createTweenType(1, arguments);\n  };\n\n  Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\n    return new Tween(callback, 0, {\n      immediateRender: false,\n      lazy: false,\n      overwrite: false,\n      delay: delay,\n      onComplete: callback,\n      onReverseComplete: callback,\n      onCompleteParams: params,\n      onReverseCompleteParams: params,\n      callbackScope: scope\n    }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)\n  };\n\n  Tween.fromTo = function fromTo(targets, fromVars, toVars) {\n    return _createTweenType(2, arguments);\n  };\n\n  Tween.set = function set(targets, vars) {\n    vars.duration = 0;\n    vars.repeatDelay || (vars.repeat = 0);\n    return new Tween(targets, vars);\n  };\n\n  Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n    return _globalTimeline.killTweensOf(targets, props, onlyActive);\n  };\n\n  return Tween;\n}(Animation);\n\n_setDefaults(Tween.prototype, {\n  _targets: [],\n  _lazy: 0,\n  _startAt: 0,\n  _op: 0,\n  _onInit: 0\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\n// _forEachName(\"to,from,fromTo,set,call,add,addLabel,addPause\", name => {\n// \tTween.prototype[name] = function() {\n// \t\tlet tl = new Timeline();\n// \t\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\n// \t}\n// });\n//for backward compatibility. Leverage the timeline calls.\n\n\n_forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\n  Tween[name] = function () {\n    var tl = new Timeline(),\n        params = _slice.call(arguments, 0);\n\n    params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\n    return tl[name].apply(tl, params);\n  };\n});\n/*\n * --------------------------------------------------------------------------------------\n * PROPTWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _setterPlain = function _setterPlain(target, property, value) {\n  return target[property] = value;\n},\n    _setterFunc = function _setterFunc(target, property, value) {\n  return target[property](value);\n},\n    _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\n  return target[property](data.fp, value);\n},\n    _setterAttribute = function _setterAttribute(target, property, value) {\n  return target.setAttribute(property, value);\n},\n    _getSetter = function _getSetter(target, property) {\n  return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\n},\n    _renderPlain = function _renderPlain(ratio, data) {\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\n},\n    _renderBoolean = function _renderBoolean(ratio, data) {\n  return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\n},\n    _renderComplexString = function _renderComplexString(ratio, data) {\n  var pt = data._pt,\n      s = \"\";\n\n  if (!ratio && data.b) {\n    //b = beginning string\n    s = data.b;\n  } else if (ratio === 1 && data.e) {\n    //e = ending string\n    s = data.e;\n  } else {\n    while (pt) {\n      s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \"p\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\n\n      pt = pt._next;\n    }\n\n    s += data.c; //we use the \"c\" of the PropTween to store the final chunk of non-numeric text.\n  }\n\n  data.set(data.t, data.p, s, data);\n},\n    _renderPropTweens = function _renderPropTweens(ratio, data) {\n  var pt = data._pt;\n\n  while (pt) {\n    pt.r(ratio, pt.d);\n    pt = pt._next;\n  }\n},\n    _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\n  var pt = this._pt,\n      next;\n\n  while (pt) {\n    next = pt._next;\n    pt.p === property && pt.modifier(modifier, tween, target);\n    pt = next;\n  }\n},\n    _killPropTweensOf = function _killPropTweensOf(property) {\n  var pt = this._pt,\n      hasNonDependentRemaining,\n      next;\n\n  while (pt) {\n    next = pt._next;\n\n    if (pt.p === property && !pt.op || pt.op === property) {\n      _removeLinkedListItem(this, pt, \"_pt\");\n    } else if (!pt.dep) {\n      hasNonDependentRemaining = 1;\n    }\n\n    pt = next;\n  }\n\n  return !hasNonDependentRemaining;\n},\n    _setterWithModifier = function _setterWithModifier(target, property, value, data) {\n  data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\n},\n    _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\n  var pt = parent._pt,\n      next,\n      pt2,\n      first,\n      last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\n\n  while (pt) {\n    next = pt._next;\n    pt2 = first;\n\n    while (pt2 && pt2.pr > pt.pr) {\n      pt2 = pt2._next;\n    }\n\n    if (pt._prev = pt2 ? pt2._prev : last) {\n      pt._prev._next = pt;\n    } else {\n      first = pt;\n    }\n\n    if (pt._next = pt2) {\n      pt2._prev = pt;\n    } else {\n      last = pt;\n    }\n\n    pt = next;\n  }\n\n  parent._pt = first;\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\n\n\nexport var PropTween = /*#__PURE__*/function () {\n  function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\n    this.t = target;\n    this.s = start;\n    this.c = change;\n    this.p = prop;\n    this.r = renderer || _renderPlain;\n    this.d = data || this;\n    this.set = setter || _setterPlain;\n    this.pr = priority || 0;\n    this._next = next;\n\n    if (next) {\n      next._prev = this;\n    }\n  }\n\n  var _proto4 = PropTween.prototype;\n\n  _proto4.modifier = function modifier(func, tween, target) {\n    this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\n\n    this.set = _setterWithModifier;\n    this.m = func;\n    this.mt = target; //modifier target\n\n    this.tween = tween;\n  };\n\n  return PropTween;\n}(); //Initialization tasks\n\n_forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\n  return _reservedProps[name] = 1;\n});\n\n_globals.TweenMax = _globals.TweenLite = Tween;\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\n_globalTimeline = new Timeline({\n  sortChildren: false,\n  defaults: _defaults,\n  autoRemoveChildren: true,\n  id: \"root\",\n  smoothChildTiming: true\n});\n_config.stringFilter = _colorStringFilter;\n\nvar _media = [],\n    _listeners = {},\n    _emptyArray = [],\n    _lastMediaTime = 0,\n    _contextID = 0,\n    _dispatch = function _dispatch(type) {\n  return (_listeners[type] || _emptyArray).map(function (f) {\n    return f();\n  });\n},\n    _onMediaChange = function _onMediaChange() {\n  var time = Date.now(),\n      matches = [];\n\n  if (time - _lastMediaTime > 2) {\n    _dispatch(\"matchMediaInit\");\n\n    _media.forEach(function (c) {\n      var queries = c.queries,\n          conditions = c.conditions,\n          match,\n          p,\n          anyMatch,\n          toggled;\n\n      for (p in queries) {\n        match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n\n        match && (anyMatch = 1);\n\n        if (match !== conditions[p]) {\n          conditions[p] = match;\n          toggled = 1;\n        }\n      }\n\n      if (toggled) {\n        c.revert();\n        anyMatch && matches.push(c);\n      }\n    });\n\n    _dispatch(\"matchMediaRevert\");\n\n    matches.forEach(function (c) {\n      return c.onMatch(c, function (func) {\n        return c.add(null, func);\n      });\n    });\n    _lastMediaTime = time;\n\n    _dispatch(\"matchMedia\");\n  }\n};\n\nvar Context = /*#__PURE__*/function () {\n  function Context(func, scope) {\n    this.selector = scope && selector(scope);\n    this.data = [];\n    this._r = []; // returned/cleanup functions\n\n    this.isReverted = false;\n    this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because \"this\" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely\n\n    func && this.add(func);\n  }\n\n  var _proto5 = Context.prototype;\n\n  _proto5.add = function add(name, func, scope) {\n    // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.\n    // if (name && _isFunction(name.revert)) {\n    // \tthis.data.push(name);\n    // \treturn (name._ctx = this);\n    // }\n    if (_isFunction(name)) {\n      scope = func;\n      func = name;\n      name = _isFunction;\n    }\n\n    var self = this,\n        f = function f() {\n      var prev = _context,\n          prevSelector = self.selector,\n          result;\n      prev && prev !== self && prev.data.push(self);\n      scope && (self.selector = selector(scope));\n      _context = self;\n      result = func.apply(self, arguments);\n      _isFunction(result) && self._r.push(result);\n      _context = prev;\n      self.selector = prevSelector;\n      self.isReverted = false;\n      return result;\n    };\n\n    self.last = f;\n    return name === _isFunction ? f(self, function (func) {\n      return self.add(null, func);\n    }) : name ? self[name] = f : f;\n  };\n\n  _proto5.ignore = function ignore(func) {\n    var prev = _context;\n    _context = null;\n    func(this);\n    _context = prev;\n  };\n\n  _proto5.getTweens = function getTweens() {\n    var a = [];\n    this.data.forEach(function (e) {\n      return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === \"nested\") && a.push(e);\n    });\n    return a;\n  };\n\n  _proto5.clear = function clear() {\n    this._r.length = this.data.length = 0;\n  };\n\n  _proto5.kill = function kill(revert, matchMedia) {\n    var _this4 = this;\n\n    if (revert) {\n      (function () {\n        var tweens = _this4.getTweens(),\n            i = _this4.data.length,\n            t;\n\n        while (i--) {\n          // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.\n          t = _this4.data[i];\n\n          if (t.data === \"isFlip\") {\n            t.revert();\n            t.getChildren(true, true, false).forEach(function (tween) {\n              return tweens.splice(tweens.indexOf(tween), 1);\n            });\n          }\n        } // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort\n\n\n        tweens.map(function (t) {\n          return {\n            g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,\n            t: t\n          };\n        }).sort(function (a, b) {\n          return b.g - a.g || -Infinity;\n        }).forEach(function (o) {\n          return o.t.revert(revert);\n        }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the \" || -1\" in the sort keeps the order properly.\n\n        i = _this4.data.length;\n\n        while (i--) {\n          // make sure we loop backwards so that, for example, SplitTexts that were created later on the same element get reverted first\n          t = _this4.data[i];\n\n          if (t instanceof Timeline) {\n            if (t.data !== \"nested\") {\n              t.scrollTrigger && t.scrollTrigger.revert();\n              t.kill(); // don't revert() the timeline because that's duplicating efforts since we already reverted all the tweens\n            }\n          } else {\n            !(t instanceof Tween) && t.revert && t.revert(revert);\n          }\n        }\n\n        _this4._r.forEach(function (f) {\n          return f(revert, _this4);\n        });\n\n        _this4.isReverted = true;\n      })();\n    } else {\n      this.data.forEach(function (e) {\n        return e.kill && e.kill();\n      });\n    }\n\n    this.clear();\n\n    if (matchMedia) {\n      var i = _media.length;\n\n      while (i--) {\n        // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead.\n        _media[i].id === this.id && _media.splice(i, 1);\n      }\n    }\n  };\n\n  _proto5.revert = function revert(config) {\n    this.kill(config || {});\n  };\n\n  return Context;\n}();\n\nvar MatchMedia = /*#__PURE__*/function () {\n  function MatchMedia(scope) {\n    this.contexts = [];\n    this.scope = scope;\n    _context && _context.data.push(this);\n  }\n\n  var _proto6 = MatchMedia.prototype;\n\n  _proto6.add = function add(conditions, func, scope) {\n    _isObject(conditions) || (conditions = {\n      matches: conditions\n    });\n    var context = new Context(0, scope || this.scope),\n        cond = context.conditions = {},\n        mq,\n        p,\n        active;\n    _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context()\n\n    this.contexts.push(context);\n    func = context.add(\"onMatch\", func);\n    context.queries = conditions;\n\n    for (p in conditions) {\n      if (p === \"all\") {\n        active = 1;\n      } else {\n        mq = _win.matchMedia(conditions[p]);\n\n        if (mq) {\n          _media.indexOf(context) < 0 && _media.push(context);\n          (cond[p] = mq.matches) && (active = 1);\n          mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n        }\n      }\n    }\n\n    active && func(context, function (f) {\n      return context.add(null, f);\n    });\n    return this;\n  } // refresh() {\n  // \tlet time = _lastMediaTime,\n  // \t\tmedia = _media;\n  // \t_lastMediaTime = -1;\n  // \t_media = this.contexts;\n  // \t_onMediaChange();\n  // \t_lastMediaTime = time;\n  // \t_media = media;\n  // }\n  ;\n\n  _proto6.revert = function revert(config) {\n    this.kill(config || {});\n  };\n\n  _proto6.kill = function kill(revert) {\n    this.contexts.forEach(function (c) {\n      return c.kill(revert, true);\n    });\n  };\n\n  return MatchMedia;\n}();\n/*\n * --------------------------------------------------------------------------------------\n * GSAP\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _gsap = {\n  registerPlugin: function registerPlugin() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    args.forEach(function (config) {\n      return _createPlugin(config);\n    });\n  },\n  timeline: function timeline(vars) {\n    return new Timeline(vars);\n  },\n  getTweensOf: function getTweensOf(targets, onlyActive) {\n    return _globalTimeline.getTweensOf(targets, onlyActive);\n  },\n  getProperty: function getProperty(target, property, unit, uncache) {\n    _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\n\n    var getter = _getCache(target || {}).get,\n        format = unit ? _passThrough : _numericIfPossible;\n\n    unit === \"native\" && (unit = \"\");\n    return !target ? target : !property ? function (property, unit, uncache) {\n      return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n    } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n  },\n  quickSetter: function quickSetter(target, property, unit) {\n    target = toArray(target);\n\n    if (target.length > 1) {\n      var setters = target.map(function (t) {\n        return gsap.quickSetter(t, property, unit);\n      }),\n          l = setters.length;\n      return function (value) {\n        var i = l;\n\n        while (i--) {\n          setters[i](value);\n        }\n      };\n    }\n\n    target = target[0] || {};\n\n    var Plugin = _plugins[property],\n        cache = _getCache(target),\n        p = cache.harness && (cache.harness.aliases || {})[property] || property,\n        // in case it's an alias, like \"rotate\" for \"rotation\".\n    setter = Plugin ? function (value) {\n      var p = new Plugin();\n      _quickTween._pt = 0;\n      p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\n      p.render(1, p);\n      _quickTween._pt && _renderPropTweens(1, _quickTween);\n    } : cache.set(target, p);\n\n    return Plugin ? setter : function (value) {\n      return setter(target, p, unit ? value + unit : value, cache, 1);\n    };\n  },\n  quickTo: function quickTo(target, property, vars) {\n    var _merge2;\n\n    var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = \"+=0.1\", _merge2.paused = true, _merge2), vars || {})),\n        func = function func(value, start, startIsRelative) {\n      return tween.resetTo(property, value, start, startIsRelative);\n    };\n\n    func.tween = tween;\n    return func;\n  },\n  isTweening: function isTweening(targets) {\n    return _globalTimeline.getTweensOf(targets, true).length > 0;\n  },\n  defaults: function defaults(value) {\n    value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\n    return _mergeDeep(_defaults, value || {});\n  },\n  config: function config(value) {\n    return _mergeDeep(_config, value || {});\n  },\n  registerEffect: function registerEffect(_ref3) {\n    var name = _ref3.name,\n        effect = _ref3.effect,\n        plugins = _ref3.plugins,\n        defaults = _ref3.defaults,\n        extendTimeline = _ref3.extendTimeline;\n    (plugins || \"\").split(\",\").forEach(function (pluginName) {\n      return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\n    });\n\n    _effects[name] = function (targets, vars, tl) {\n      return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\n    };\n\n    if (extendTimeline) {\n      Timeline.prototype[name] = function (targets, vars, position) {\n        return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\n      };\n    }\n  },\n  registerEase: function registerEase(name, ease) {\n    _easeMap[name] = _parseEase(ease);\n  },\n  parseEase: function parseEase(ease, defaultEase) {\n    return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\n  },\n  getById: function getById(id) {\n    return _globalTimeline.getById(id);\n  },\n  exportRoot: function exportRoot(vars, includeDelayedCalls) {\n    if (vars === void 0) {\n      vars = {};\n    }\n\n    var tl = new Timeline(vars),\n        child,\n        next;\n    tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\n\n    _globalTimeline.remove(tl);\n\n    tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\n\n    tl._time = tl._tTime = _globalTimeline._time;\n    child = _globalTimeline._first;\n\n    while (child) {\n      next = child._next;\n\n      if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\n        _addToTimeline(tl, child, child._start - child._delay);\n      }\n\n      child = next;\n    }\n\n    _addToTimeline(_globalTimeline, tl, 0);\n\n    return tl;\n  },\n  context: function context(func, scope) {\n    return func ? new Context(func, scope) : _context;\n  },\n  matchMedia: function matchMedia(scope) {\n    return new MatchMedia(scope);\n  },\n  matchMediaRefresh: function matchMediaRefresh() {\n    return _media.forEach(function (c) {\n      var cond = c.conditions,\n          found,\n          p;\n\n      for (p in cond) {\n        if (cond[p]) {\n          cond[p] = false;\n          found = 1;\n        }\n      }\n\n      found && c.revert();\n    }) || _onMediaChange();\n  },\n  addEventListener: function addEventListener(type, callback) {\n    var a = _listeners[type] || (_listeners[type] = []);\n    ~a.indexOf(callback) || a.push(callback);\n  },\n  removeEventListener: function removeEventListener(type, callback) {\n    var a = _listeners[type],\n        i = a && a.indexOf(callback);\n    i >= 0 && a.splice(i, 1);\n  },\n  utils: {\n    wrap: wrap,\n    wrapYoyo: wrapYoyo,\n    distribute: distribute,\n    random: random,\n    snap: snap,\n    normalize: normalize,\n    getUnit: getUnit,\n    clamp: clamp,\n    splitColor: splitColor,\n    toArray: toArray,\n    selector: selector,\n    mapRange: mapRange,\n    pipe: pipe,\n    unitize: unitize,\n    interpolate: interpolate,\n    shuffle: shuffle\n  },\n  install: _install,\n  effects: _effects,\n  ticker: _ticker,\n  updateRoot: Timeline.updateRoot,\n  plugins: _plugins,\n  globalTimeline: _globalTimeline,\n  core: {\n    PropTween: PropTween,\n    globals: _addGlobal,\n    Tween: Tween,\n    Timeline: Timeline,\n    Animation: Animation,\n    getCache: _getCache,\n    _removeLinkedListItem: _removeLinkedListItem,\n    reverting: function reverting() {\n      return _reverting;\n    },\n    context: function context(toAdd) {\n      if (toAdd && _context) {\n        _context.data.push(toAdd);\n\n        toAdd._ctx = _context;\n      }\n\n      return _context;\n    },\n    suppressOverwrites: function suppressOverwrites(value) {\n      return _suppressOverwrites = value;\n    }\n  }\n};\n\n_forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\n  return _gsap[name] = Tween[name];\n});\n\n_ticker.add(Timeline.updateRoot);\n\n_quickTween = _gsap.to({}, {\n  duration: 0\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\n\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\n  var pt = plugin._pt;\n\n  while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\n    pt = pt._next;\n  }\n\n  return pt;\n},\n    _addModifiers = function _addModifiers(tween, modifiers) {\n  var targets = tween._targets,\n      p,\n      i,\n      pt;\n\n  for (p in modifiers) {\n    i = targets.length;\n\n    while (i--) {\n      pt = tween._ptLookup[i][p];\n\n      if (pt && (pt = pt.d)) {\n        if (pt._pt) {\n          // is a plugin\n          pt = _getPluginPropTween(pt, p);\n        }\n\n        pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\n      }\n    }\n  }\n},\n    _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\n  return {\n    name: name,\n    rawVars: 1,\n    //don't pre-process function-based values or \"random()\" strings.\n    init: function init(target, vars, tween) {\n      tween._onInit = function (tween) {\n        var temp, p;\n\n        if (_isString(vars)) {\n          temp = {};\n\n          _forEachName(vars, function (name) {\n            return temp[name] = 1;\n          }); //if the user passes in a comma-delimited list of property names to roundProps, like \"x,y\", we round to whole numbers.\n\n\n          vars = temp;\n        }\n\n        if (modifier) {\n          temp = {};\n\n          for (p in vars) {\n            temp[p] = modifier(vars[p]);\n          }\n\n          vars = temp;\n        }\n\n        _addModifiers(tween, vars);\n      };\n    }\n  };\n}; //register core plugins\n\n\nexport var gsap = _gsap.registerPlugin({\n  name: \"attr\",\n  init: function init(target, vars, tween, index, targets) {\n    var p, pt, v;\n    this.tween = tween;\n\n    for (p in vars) {\n      v = target.getAttribute(p) || \"\";\n      pt = this.add(target, \"setAttribute\", (v || 0) + \"\", vars[p], index, targets, 0, 0, p);\n      pt.op = p;\n      pt.b = v; // record the beginning value so we can revert()\n\n      this._props.push(p);\n    }\n  },\n  render: function render(ratio, data) {\n    var pt = data._pt;\n\n    while (pt) {\n      _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)\n\n      pt = pt._next;\n    }\n  }\n}, {\n  name: \"endArray\",\n  init: function init(target, value) {\n    var i = value.length;\n\n    while (i--) {\n      this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);\n    }\n  }\n}, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\n\nTween.version = Timeline.version = gsap.version = \"3.12.5\";\n_coreReady = 1;\n_windowExists() && _wake();\nvar Power0 = _easeMap.Power0,\n    Power1 = _easeMap.Power1,\n    Power2 = _easeMap.Power2,\n    Power3 = _easeMap.Power3,\n    Power4 = _easeMap.Power4,\n    Linear = _easeMap.Linear,\n    Quad = _easeMap.Quad,\n    Cubic = _easeMap.Cubic,\n    Quart = _easeMap.Quart,\n    Quint = _easeMap.Quint,\n    Strong = _easeMap.Strong,\n    Elastic = _easeMap.Elastic,\n    Back = _easeMap.Back,\n    SteppedEase = _easeMap.SteppedEase,\n    Bounce = _easeMap.Bounce,\n    Sine = _easeMap.Sine,\n    Expo = _easeMap.Expo,\n    Circ = _easeMap.Circ;\nexport { Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };\nexport { Tween as TweenMax, Tween as TweenLite, Timeline as TimelineMax, Timeline as TimelineLite, gsap as default, wrap, wrapYoyo, distribute, random, snap, normalize, getUnit, clamp, splitColor, toArray, selector, mapRange, pipe, unitize, interpolate, shuffle }; //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\n\nexport { _getProperty, _numExp, _numWithUnitExp, _isString, _isUndefined, _renderComplexString, _relExp, _setDefaults, _removeLinkedListItem, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _replaceRandom, _checkPlugin, _plugins, _ticker, _config, _roundModifier, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative };","/*!\n * CSSPlugin 3.12.5\n * https://gsap.com\n *\n * Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { gsap, _getProperty, _numExp, _numWithUnitExp, getUnit, _isString, _isUndefined, _renderComplexString, _relExp, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _checkPlugin, _replaceRandom, _plugins, GSCache, PropTween, _config, _ticker, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative, _setDefaults, _removeLinkedListItem //for the commented-out className feature.\n} from \"./gsap-core.js\";\n\nvar _win,\n    _doc,\n    _docElement,\n    _pluginInitted,\n    _tempDiv,\n    _tempDivStyler,\n    _recentSetterPlugin,\n    _reverting,\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _transformProps = {},\n    _RAD2DEG = 180 / Math.PI,\n    _DEG2RAD = Math.PI / 180,\n    _atan2 = Math.atan2,\n    _bigNum = 1e8,\n    _capsExp = /([A-Z])/g,\n    _horizontalExp = /(left|right|width|margin|padding|x)/i,\n    _complexExp = /[\\s,\\(]\\S/,\n    _propertyAliases = {\n  autoAlpha: \"opacity,visibility\",\n  scale: \"scaleX,scaleY\",\n  alpha: \"opacity\"\n},\n    _renderCSSProp = function _renderCSSProp(ratio, data) {\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n    _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\n  return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n    _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\n  return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\n},\n    //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\n  var value = data.s + data.c * ratio;\n  data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\n},\n    _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\n  return data.set(data.t, data.p, ratio ? data.e : data.b, data);\n},\n    _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\n  return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\n},\n    _setterCSSStyle = function _setterCSSStyle(target, property, value) {\n  return target.style[property] = value;\n},\n    _setterCSSProp = function _setterCSSProp(target, property, value) {\n  return target.style.setProperty(property, value);\n},\n    _setterTransform = function _setterTransform(target, property, value) {\n  return target._gsap[property] = value;\n},\n    _setterScale = function _setterScale(target, property, value) {\n  return target._gsap.scaleX = target._gsap.scaleY = value;\n},\n    _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\n  var cache = target._gsap;\n  cache.scaleX = cache.scaleY = value;\n  cache.renderTransform(ratio, cache);\n},\n    _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\n  var cache = target._gsap;\n  cache[property] = value;\n  cache.renderTransform(ratio, cache);\n},\n    _transformProp = \"transform\",\n    _transformOriginProp = _transformProp + \"Origin\",\n    _saveStyle = function _saveStyle(property, isNotCSS) {\n  var _this = this;\n\n  var target = this.target,\n      style = target.style,\n      cache = target._gsap;\n\n  if (property in _transformProps && style) {\n    this.tfm = this.tfm || {};\n\n    if (property !== \"transform\") {\n      property = _propertyAliases[property] || property;\n      ~property.indexOf(\",\") ? property.split(\",\").forEach(function (a) {\n        return _this.tfm[a] = _get(target, a);\n      }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property); // note: scale would map to \"scaleX,scaleY\", thus we loop and apply them both.\n\n      property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);\n    } else {\n      return _propertyAliases.transform.split(\",\").forEach(function (p) {\n        return _saveStyle.call(_this, p, isNotCSS);\n      });\n    }\n\n    if (this.props.indexOf(_transformProp) >= 0) {\n      return;\n    }\n\n    if (cache.svg) {\n      this.svgo = target.getAttribute(\"data-svg-origin\");\n      this.props.push(_transformOriginProp, isNotCSS, \"\");\n    }\n\n    property = _transformProp;\n  }\n\n  (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);\n},\n    _removeIndependentTransforms = function _removeIndependentTransforms(style) {\n  if (style.translate) {\n    style.removeProperty(\"translate\");\n    style.removeProperty(\"scale\");\n    style.removeProperty(\"rotate\");\n  }\n},\n    _revertStyle = function _revertStyle() {\n  var props = this.props,\n      target = this.target,\n      style = target.style,\n      cache = target._gsap,\n      i,\n      p;\n\n  for (i = 0; i < props.length; i += 3) {\n    // stored like this: property, isNotCSS, value\n    props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === \"--\" ? props[i] : props[i].replace(_capsExp, \"-$1\").toLowerCase());\n  }\n\n  if (this.tfm) {\n    for (p in this.tfm) {\n      cache[p] = this.tfm[p];\n    }\n\n    if (cache.svg) {\n      cache.renderTransform();\n      target.setAttribute(\"data-svg-origin\", this.svgo || \"\");\n    }\n\n    i = _reverting();\n\n    if ((!i || !i.isStart) && !style[_transformProp]) {\n      _removeIndependentTransforms(style);\n\n      if (cache.zOrigin && style[_transformOriginProp]) {\n        style[_transformOriginProp] += \" \" + cache.zOrigin + \"px\"; // since we're uncaching, we must put the zOrigin back into the transformOrigin so that we can pull it out accurately when we parse again. Otherwise, we'd lose the z portion of the origin since we extract it to protect from Safari bugs.\n\n        cache.zOrigin = 0;\n        cache.renderTransform();\n      }\n\n      cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.\n    }\n  }\n},\n    _getStyleSaver = function _getStyleSaver(target, properties) {\n  var saver = {\n    target: target,\n    props: [],\n    revert: _revertStyle,\n    save: _saveStyle\n  };\n  target._gsap || gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.\n\n  properties && properties.split(\",\").forEach(function (p) {\n    return saver.save(p);\n  });\n  return saver;\n},\n    _supports3D,\n    _createElement = function _createElement(type, ns) {\n  var e = _doc.createElementNS ? _doc.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \"style\" inaccessible.\n\n  return e && e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://gsap.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n},\n    _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\n  var cs = getComputedStyle(target);\n  return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\"; //css variables may not need caps swapped out for dashes and lowercase.\n},\n    _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\n    _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\n  var e = element || _tempDiv,\n      s = e.style,\n      i = 5;\n\n  if (property in s && !preferPrefix) {\n    return property;\n  }\n\n  property = property.charAt(0).toUpperCase() + property.substr(1);\n\n  while (i-- && !(_prefixes[i] + property in s)) {}\n\n  return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\n},\n    _initCore = function _initCore() {\n  if (_windowExists() && window.document) {\n    _win = window;\n    _doc = _win.document;\n    _docElement = _doc.documentElement;\n    _tempDiv = _createElement(\"div\") || {\n      style: {}\n    };\n    _tempDivStyler = _createElement(\"div\");\n    _transformProp = _checkPropPrefix(_transformProp);\n    _transformOriginProp = _transformProp + \"Origin\";\n    _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\n\n    _supports3D = !!_checkPropPrefix(\"perspective\");\n    _reverting = gsap.core.reverting;\n    _pluginInitted = 1;\n  }\n},\n    _getBBoxHack = function _getBBoxHack(swapIfPossible) {\n  //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n  var svg = _createElement(\"svg\", this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\n      oldParent = this.parentNode,\n      oldSibling = this.nextSibling,\n      oldCSS = this.style.cssText,\n      bbox;\n\n  _docElement.appendChild(svg);\n\n  svg.appendChild(this);\n  this.style.display = \"block\";\n\n  if (swapIfPossible) {\n    try {\n      bbox = this.getBBox();\n      this._gsapBBox = this.getBBox; //store the original\n\n      this.getBBox = _getBBoxHack;\n    } catch (e) {}\n  } else if (this._gsapBBox) {\n    bbox = this._gsapBBox();\n  }\n\n  if (oldParent) {\n    if (oldSibling) {\n      oldParent.insertBefore(this, oldSibling);\n    } else {\n      oldParent.appendChild(this);\n    }\n  }\n\n  _docElement.removeChild(svg);\n\n  this.style.cssText = oldCSS;\n  return bbox;\n},\n    _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\n  var i = attributesArray.length;\n\n  while (i--) {\n    if (target.hasAttribute(attributesArray[i])) {\n      return target.getAttribute(attributesArray[i]);\n    }\n  }\n},\n    _getBBox = function _getBBox(target) {\n  var bounds;\n\n  try {\n    bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n  } catch (error) {\n    bounds = _getBBoxHack.call(target, true);\n  }\n\n  bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\n  return bounds && !bounds.width && !bounds.x && !bounds.y ? {\n    x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\n    y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\n    width: 0,\n    height: 0\n  } : bounds;\n},\n    _isSVG = function _isSVG(e) {\n  return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n},\n    //reports if the element is an SVG on which getBBox() actually works\n_removeProperty = function _removeProperty(target, property) {\n  if (property) {\n    var style = target.style,\n        first2Chars;\n\n    if (property in _transformProps && property !== _transformOriginProp) {\n      property = _transformProp;\n    }\n\n    if (style.removeProperty) {\n      first2Chars = property.substr(0, 2);\n\n      if (first2Chars === \"ms\" || property.substr(0, 6) === \"webkit\") {\n        //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n        property = \"-\" + property;\n      }\n\n      style.removeProperty(first2Chars === \"--\" ? property : property.replace(_capsExp, \"-$1\").toLowerCase());\n    } else {\n      //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n      style.removeAttribute(property);\n    }\n  }\n},\n    _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\n  var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\n  plugin._pt = pt;\n  pt.b = beginning;\n  pt.e = end;\n\n  plugin._props.push(property);\n\n  return pt;\n},\n    _nonConvertibleUnits = {\n  deg: 1,\n  rad: 1,\n  turn: 1\n},\n    _nonStandardLayouts = {\n  grid: 1,\n  flex: 1\n},\n    //takes a single value like 20px and converts it to the unit specified, like \"%\", returning only the numeric amount.\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\n  var curValue = parseFloat(value) || 0,\n      curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\n      // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\n  style = _tempDiv.style,\n      horizontal = _horizontalExp.test(property),\n      isRootSVG = target.tagName.toLowerCase() === \"svg\",\n      measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\n      amount = 100,\n      toPixels = unit === \"px\",\n      toPercent = unit === \"%\",\n      px,\n      parent,\n      cache,\n      isSVG;\n\n  if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\n    return curValue;\n  }\n\n  curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\n  isSVG = target.getCTM && _isSVG(target);\n\n  if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\n    px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\n    return _round(toPercent ? curValue / px * amount : curValue / 100 * px);\n  }\n\n  style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\n  parent = ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\n\n  if (isSVG) {\n    parent = (target.ownerSVGElement || {}).parentNode;\n  }\n\n  if (!parent || parent === _doc || !parent.appendChild) {\n    parent = _doc.body;\n  }\n\n  cache = parent._gsap;\n\n  if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {\n    return _round(curValue / cache.width * amount);\n  } else {\n    if (toPercent && (property === \"height\" || property === \"width\")) {\n      // if we're dealing with width/height that's inside a container with padding and/or it's a flexbox/grid container, we must apply it to the target itself rather than the _tempDiv in order to ensure complete accuracy, factoring in the parent's padding.\n      var v = target.style[property];\n      target.style[property] = amount + unit;\n      px = target[measureProperty];\n      v ? target.style[property] = v : _removeProperty(target, property);\n    } else {\n      (toPercent || curUnit === \"%\") && !_nonStandardLayouts[_getComputedProperty(parent, \"display\")] && (style.position = _getComputedProperty(target, \"position\"));\n      parent === target && (style.position = \"static\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\n\n      parent.appendChild(_tempDiv);\n      px = _tempDiv[measureProperty];\n      parent.removeChild(_tempDiv);\n      style.position = \"absolute\";\n    }\n\n    if (horizontal && toPercent) {\n      cache = _getCache(parent);\n      cache.time = _ticker.time;\n      cache.width = parent[measureProperty];\n    }\n  }\n\n  return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\n},\n    _get = function _get(target, property, unit, uncache) {\n  var value;\n  _pluginInitted || _initCore();\n\n  if (property in _propertyAliases && property !== \"transform\") {\n    property = _propertyAliases[property];\n\n    if (~property.indexOf(\",\")) {\n      property = property.split(\",\")[0];\n    }\n  }\n\n  if (_transformProps[property] && property !== \"transform\") {\n    value = _parseTransform(target, uncache);\n    value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\n  } else {\n    value = target.style[property];\n\n    if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\n      value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === \"opacity\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like  borderTopLeftRadius\n    }\n  }\n\n  return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\n},\n    _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\n  // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n  if (!start || start === \"none\") {\n    // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\"clipPath\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \"none\" whereas WebkitClipPath reports accurately like \"ellipse(100% 0% at 50% 0%)\", so in this case we must SWITCH to using the prefixed property instead. See https://gsap.com/forums/topic/18310-clippath-doesnt-work-on-ios/\n    var p = _checkPropPrefix(prop, target, 1),\n        s = p && _getComputedProperty(target, p, 1);\n\n    if (s && s !== start) {\n      prop = p;\n      start = s;\n    } else if (prop === \"borderColor\") {\n      start = _getComputedProperty(target, \"borderTopColor\"); // Firefox bug: always reports \"borderColor\" as \"\", so we must fall back to borderTopColor. See https://gsap.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\n    }\n  }\n\n  var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),\n      index = 0,\n      matchIndex = 0,\n      a,\n      result,\n      startValues,\n      startNum,\n      color,\n      startValue,\n      endValue,\n      endNum,\n      chunk,\n      endUnit,\n      startUnit,\n      endValues;\n  pt.b = start;\n  pt.e = end;\n  start += \"\"; // ensure values are strings\n\n  end += \"\";\n\n  if (end === \"auto\") {\n    startValue = target.style[prop];\n    target.style[prop] = end;\n    end = _getComputedProperty(target, prop) || end;\n    startValue ? target.style[prop] = startValue : _removeProperty(target, prop);\n  }\n\n  a = [start, end];\n\n  _colorStringFilter(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\n\n\n  start = a[0];\n  end = a[1];\n  startValues = start.match(_numWithUnitExp) || [];\n  endValues = end.match(_numWithUnitExp) || [];\n\n  if (endValues.length) {\n    while (result = _numWithUnitExp.exec(end)) {\n      endValue = result[0];\n      chunk = end.substring(index, result.index);\n\n      if (color) {\n        color = (color + 1) % 5;\n      } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\n        color = 1;\n      }\n\n      if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\n        startNum = parseFloat(startValue) || 0;\n        startUnit = startValue.substr((startNum + \"\").length);\n        endValue.charAt(1) === \"=\" && (endValue = _parseRelative(startNum, endValue) + startUnit);\n        endNum = parseFloat(endValue);\n        endUnit = endValue.substr((endNum + \"\").length);\n        index = _numWithUnitExp.lastIndex - endUnit.length;\n\n        if (!endUnit) {\n          //if something like \"perspective:300\" is passed in and we must add a unit to the end\n          endUnit = endUnit || _config.units[prop] || startUnit;\n\n          if (index === end.length) {\n            end += endUnit;\n            pt.e += endUnit;\n          }\n        }\n\n        if (startUnit !== endUnit) {\n          startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\n        } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n\n        pt._pt = {\n          _next: pt._pt,\n          p: chunk || matchIndex === 1 ? chunk : \",\",\n          //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n          s: startNum,\n          c: endNum - startNum,\n          m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\n        };\n      }\n    }\n\n    pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n  } else {\n    pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\n  }\n\n  _relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \"this\" would refer to the plugin.\n\n  return pt;\n},\n    _keywordToPercent = {\n  top: \"0%\",\n  bottom: \"100%\",\n  left: \"0%\",\n  right: \"100%\",\n  center: \"50%\"\n},\n    _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\n  var split = value.split(\" \"),\n      x = split[0],\n      y = split[1] || \"50%\";\n\n  if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\n    //the user provided them in the wrong order, so flip them\n    value = x;\n    x = y;\n    y = value;\n  }\n\n  split[0] = _keywordToPercent[x] || x;\n  split[1] = _keywordToPercent[y] || y;\n  return split.join(\" \");\n},\n    _renderClearProps = function _renderClearProps(ratio, data) {\n  if (data.tween && data.tween._time === data.tween._dur) {\n    var target = data.t,\n        style = target.style,\n        props = data.u,\n        cache = target._gsap,\n        prop,\n        clearTransforms,\n        i;\n\n    if (props === \"all\" || props === true) {\n      style.cssText = \"\";\n      clearTransforms = 1;\n    } else {\n      props = props.split(\",\");\n      i = props.length;\n\n      while (--i > -1) {\n        prop = props[i];\n\n        if (_transformProps[prop]) {\n          clearTransforms = 1;\n          prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\n        }\n\n        _removeProperty(target, prop);\n      }\n    }\n\n    if (clearTransforms) {\n      _removeProperty(target, _transformProp);\n\n      if (cache) {\n        cache.svg && target.removeAttribute(\"transform\");\n\n        _parseTransform(target, 1); // force all the cached values back to \"normal\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\n\n\n        cache.uncache = 1;\n\n        _removeIndependentTransforms(style);\n      }\n    }\n  }\n},\n    // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\n_specialProps = {\n  clearProps: function clearProps(plugin, target, property, endValue, tween) {\n    if (tween.data !== \"isFromStart\") {\n      var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\n      pt.u = endValue;\n      pt.pr = -10;\n      pt.tween = tween;\n\n      plugin._props.push(property);\n\n      return 1;\n    }\n  }\n  /* className feature (about 0.4kb gzipped).\n  , className(plugin, target, property, endValue, tween) {\n  \tlet _renderClassName = (ratio, data) => {\n  \t\t\tdata.css.render(ratio, data.css);\n  \t\t\tif (!ratio || ratio === 1) {\n  \t\t\t\tlet inline = data.rmv,\n  \t\t\t\t\ttarget = data.t,\n  \t\t\t\t\tp;\n  \t\t\t\ttarget.setAttribute(\"class\", ratio ? data.e : data.b);\n  \t\t\t\tfor (p in inline) {\n  \t\t\t\t\t_removeProperty(target, p);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t_getAllStyles = (target) => {\n  \t\t\tlet styles = {},\n  \t\t\t\tcomputed = getComputedStyle(target),\n  \t\t\t\tp;\n  \t\t\tfor (p in computed) {\n  \t\t\t\tif (isNaN(p) && p !== \"cssText\" && p !== \"length\") {\n  \t\t\t\t\tstyles[p] = computed[p];\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\t_setDefaults(styles, _parseTransform(target, 1));\n  \t\t\treturn styles;\n  \t\t},\n  \t\tstartClassList = target.getAttribute(\"class\"),\n  \t\tstyle = target.style,\n  \t\tcssText = style.cssText,\n  \t\tcache = target._gsap,\n  \t\tclassPT = cache.classPT,\n  \t\tinlineToRemoveAtEnd = {},\n  \t\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \"=\") ? endValue : startClassList.replace(new RegExp(\"(?:\\\\s|^)\" + endValue.substr(2) + \"(?![\\\\w-])\"), \"\") + ((endValue.charAt(0) === \"+\") ? \" \" + endValue.substr(2) : \"\")},\n  \t\tchangingVars = {},\n  \t\tstartVars = _getAllStyles(target),\n  \t\ttransformRelated = /(transform|perspective)/i,\n  \t\tendVars, p;\n  \tif (classPT) {\n  \t\tclassPT.r(1, classPT.d);\n  \t\t_removeLinkedListItem(classPT.d.plugin, classPT, \"_pt\");\n  \t}\n  \ttarget.setAttribute(\"class\", data.e);\n  \tendVars = _getAllStyles(target, true);\n  \ttarget.setAttribute(\"class\", startClassList);\n  \tfor (p in endVars) {\n  \t\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\n  \t\t\tchangingVars[p] = endVars[p];\n  \t\t\tif (!style[p] && style[p] !== \"0\") {\n  \t\t\t\tinlineToRemoveAtEnd[p] = 1;\n  \t\t\t}\n  \t\t}\n  \t}\n  \tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \"className\", 0, 0, _renderClassName, data, 0, -11);\n  \tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n  \t\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n  \t}\n  \t_parseTransform(target, true); //to clear the caching of transforms\n  \tdata.css = new gsap.plugins.css();\n  \tdata.css.init(target, changingVars, tween);\n  \tplugin._props.push(...data.css._props);\n  \treturn 1;\n  }\n  */\n\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TRANSFORMS\n * --------------------------------------------------------------------------------------\n */\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\n    _rotationalProperties = {},\n    _isNullTransform = function _isNullTransform(value) {\n  return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\n},\n    _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\n  var matrixString = _getComputedProperty(target, _transformProp);\n\n  return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);\n},\n    _getMatrix = function _getMatrix(target, force2D) {\n  var cache = target._gsap || _getCache(target),\n      style = target.style,\n      matrix = _getComputedTransformMatrixAsArray(target),\n      parent,\n      nextSibling,\n      temp,\n      addedToDOM;\n\n  if (cache.svg && target.getAttribute(\"transform\")) {\n    temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\n\n    matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\n    return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\n  } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\n    //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n    temp = style.display;\n    style.display = \"block\";\n    parent = target.parentNode;\n\n    if (!parent || !target.offsetParent) {\n      // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375\n      addedToDOM = 1; //flag\n\n      nextSibling = target.nextElementSibling;\n\n      _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\n\n    }\n\n    matrix = _getComputedTransformMatrixAsArray(target);\n    temp ? style.display = temp : _removeProperty(target, \"display\");\n\n    if (addedToDOM) {\n      nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\n    }\n  }\n\n  return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\n},\n    _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\n  var cache = target._gsap,\n      matrix = matrixArray || _getMatrix(target, true),\n      xOriginOld = cache.xOrigin || 0,\n      yOriginOld = cache.yOrigin || 0,\n      xOffsetOld = cache.xOffset || 0,\n      yOffsetOld = cache.yOffset || 0,\n      a = matrix[0],\n      b = matrix[1],\n      c = matrix[2],\n      d = matrix[3],\n      tx = matrix[4],\n      ty = matrix[5],\n      originSplit = origin.split(\" \"),\n      xOrigin = parseFloat(originSplit[0]) || 0,\n      yOrigin = parseFloat(originSplit[1]) || 0,\n      bounds,\n      determinant,\n      x,\n      y;\n\n  if (!originIsAbsolute) {\n    bounds = _getBBox(target);\n    xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\n    yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin); // if (!(\"xOrigin\" in cache) && (xOrigin || yOrigin)) { // added in 3.12.3, reverted in 3.12.4; requires more exploration\n    // \txOrigin -= bounds.x;\n    // \tyOrigin -= bounds.y;\n    // }\n  } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\n    //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n    x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\n    y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\n    xOrigin = x;\n    yOrigin = y; // theory: we only had to do this for smoothing and it assumes that the previous one was not originIsAbsolute.\n  }\n\n  if (smooth || smooth !== false && cache.smooth) {\n    tx = xOrigin - xOriginOld;\n    ty = yOrigin - yOriginOld;\n    cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\n    cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\n  } else {\n    cache.xOffset = cache.yOffset = 0;\n  }\n\n  cache.xOrigin = xOrigin;\n  cache.yOrigin = yOrigin;\n  cache.smooth = !!smooth;\n  cache.origin = origin;\n  cache.originIsAbsolute = !!originIsAbsolute;\n  target.style[_transformOriginProp] = \"0px 0px\"; //otherwise, if someone sets  an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\n\n  if (pluginToAddPropTweensTo) {\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\n  }\n\n  target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\n},\n    _parseTransform = function _parseTransform(target, uncache) {\n  var cache = target._gsap || new GSCache(target);\n\n  if (\"x\" in cache && !uncache && !cache.uncache) {\n    return cache;\n  }\n\n  var style = target.style,\n      invertedScaleX = cache.scaleX < 0,\n      px = \"px\",\n      deg = \"deg\",\n      cs = getComputedStyle(target),\n      origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\n      x,\n      y,\n      z,\n      scaleX,\n      scaleY,\n      rotation,\n      rotationX,\n      rotationY,\n      skewX,\n      skewY,\n      perspective,\n      xOrigin,\n      yOrigin,\n      matrix,\n      angle,\n      cos,\n      sin,\n      a,\n      b,\n      c,\n      d,\n      a12,\n      a22,\n      t1,\n      t2,\n      t3,\n      a13,\n      a23,\n      a33,\n      a42,\n      a43,\n      a32;\n  x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\n  scaleX = scaleY = 1;\n  cache.svg = !!(target.getCTM && _isSVG(target));\n\n  if (cs.translate) {\n    // accommodate independent transforms by combining them into normal ones.\n    if (cs.translate !== \"none\" || cs.scale !== \"none\" || cs.rotate !== \"none\") {\n      style[_transformProp] = (cs.translate !== \"none\" ? \"translate3d(\" + (cs.translate + \" 0 0\").split(\" \").slice(0, 3).join(\", \") + \") \" : \"\") + (cs.rotate !== \"none\" ? \"rotate(\" + cs.rotate + \") \" : \"\") + (cs.scale !== \"none\" ? \"scale(\" + cs.scale.split(\" \").join(\",\") + \") \" : \"\") + (cs[_transformProp] !== \"none\" ? cs[_transformProp] : \"\");\n    }\n\n    style.scale = style.rotate = style.translate = \"none\";\n  }\n\n  matrix = _getMatrix(target, cache.svg);\n\n  if (cache.svg) {\n    if (cache.uncache) {\n      // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \"px \" + (cache.yOrigin - bbox.y) + \"px\". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.\n      t2 = target.getBBox();\n      origin = cache.xOrigin - t2.x + \"px \" + (cache.yOrigin - t2.y) + \"px\";\n      t1 = \"\";\n    } else {\n      t1 = !uncache && target.getAttribute(\"data-svg-origin\"); //  Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\n    }\n\n    _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\n  }\n\n  xOrigin = cache.xOrigin || 0;\n  yOrigin = cache.yOrigin || 0;\n\n  if (matrix !== _identity2DMatrix) {\n    a = matrix[0]; //a11\n\n    b = matrix[1]; //a21\n\n    c = matrix[2]; //a31\n\n    d = matrix[3]; //a41\n\n    x = a12 = matrix[4];\n    y = a22 = matrix[5]; //2D matrix\n\n    if (matrix.length === 6) {\n      scaleX = Math.sqrt(a * a + b * b);\n      scaleY = Math.sqrt(d * d + c * c);\n      rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\n      skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\n      skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\n\n      if (cache.svg) {\n        x -= xOrigin - (xOrigin * a + yOrigin * c);\n        y -= yOrigin - (xOrigin * b + yOrigin * d);\n      } //3D matrix\n\n    } else {\n      a32 = matrix[6];\n      a42 = matrix[7];\n      a13 = matrix[8];\n      a23 = matrix[9];\n      a33 = matrix[10];\n      a43 = matrix[11];\n      x = matrix[12];\n      y = matrix[13];\n      z = matrix[14];\n      angle = _atan2(a32, a33);\n      rotationX = angle * _RAD2DEG; //rotationX\n\n      if (angle) {\n        cos = Math.cos(-angle);\n        sin = Math.sin(-angle);\n        t1 = a12 * cos + a13 * sin;\n        t2 = a22 * cos + a23 * sin;\n        t3 = a32 * cos + a33 * sin;\n        a13 = a12 * -sin + a13 * cos;\n        a23 = a22 * -sin + a23 * cos;\n        a33 = a32 * -sin + a33 * cos;\n        a43 = a42 * -sin + a43 * cos;\n        a12 = t1;\n        a22 = t2;\n        a32 = t3;\n      } //rotationY\n\n\n      angle = _atan2(-c, a33);\n      rotationY = angle * _RAD2DEG;\n\n      if (angle) {\n        cos = Math.cos(-angle);\n        sin = Math.sin(-angle);\n        t1 = a * cos - a13 * sin;\n        t2 = b * cos - a23 * sin;\n        t3 = c * cos - a33 * sin;\n        a43 = d * sin + a43 * cos;\n        a = t1;\n        b = t2;\n        c = t3;\n      } //rotationZ\n\n\n      angle = _atan2(b, a);\n      rotation = angle * _RAD2DEG;\n\n      if (angle) {\n        cos = Math.cos(angle);\n        sin = Math.sin(angle);\n        t1 = a * cos + b * sin;\n        t2 = a12 * cos + a22 * sin;\n        b = b * cos - a * sin;\n        a22 = a22 * cos - a12 * sin;\n        a = t1;\n        a12 = t2;\n      }\n\n      if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\n        //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n        rotationX = rotation = 0;\n        rotationY = 180 - rotationY;\n      }\n\n      scaleX = _round(Math.sqrt(a * a + b * b + c * c));\n      scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));\n      angle = _atan2(a12, a22);\n      skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\n      perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\n    }\n\n    if (cache.svg) {\n      //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\n      t1 = target.getAttribute(\"transform\");\n      cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\n      t1 && target.setAttribute(\"transform\", t1);\n    }\n  }\n\n  if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n    if (invertedScaleX) {\n      scaleX *= -1;\n      skewX += rotation <= 0 ? 180 : -180;\n      rotation += rotation <= 0 ? 180 : -180;\n    } else {\n      scaleY *= -1;\n      skewX += skewX <= 0 ? 180 : -180;\n    }\n  }\n\n  uncache = uncache || cache.uncache;\n  cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\n  cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\n  cache.z = z + px;\n  cache.scaleX = _round(scaleX);\n  cache.scaleY = _round(scaleY);\n  cache.rotation = _round(rotation) + deg;\n  cache.rotationX = _round(rotationX) + deg;\n  cache.rotationY = _round(rotationY) + deg;\n  cache.skewX = skewX + deg;\n  cache.skewY = skewY + deg;\n  cache.transformPerspective = perspective + px;\n\n  if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || !uncache && cache.zOrigin || 0) {\n    style[_transformOriginProp] = _firstTwoOnly(origin);\n  }\n\n  cache.xOffset = cache.yOffset = 0;\n  cache.force3D = _config.force3D;\n  cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\n  cache.uncache = 0;\n  return cache;\n},\n    _firstTwoOnly = function _firstTwoOnly(value) {\n  return (value = value.split(\" \"))[0] + \" \" + value[1];\n},\n    //for handling transformOrigin values, stripping out the 3rd dimension\n_addPxTranslate = function _addPxTranslate(target, start, value) {\n  var unit = getUnit(start);\n  return _round(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\n},\n    _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\n  cache.z = \"0px\";\n  cache.rotationY = cache.rotationX = \"0deg\";\n  cache.force3D = 0;\n\n  _renderCSSTransforms(ratio, cache);\n},\n    _zeroDeg = \"0deg\",\n    _zeroPx = \"0px\",\n    _endParenthesis = \") \",\n    _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\n  var _ref = cache || this,\n      xPercent = _ref.xPercent,\n      yPercent = _ref.yPercent,\n      x = _ref.x,\n      y = _ref.y,\n      z = _ref.z,\n      rotation = _ref.rotation,\n      rotationY = _ref.rotationY,\n      rotationX = _ref.rotationX,\n      skewX = _ref.skewX,\n      skewY = _ref.skewY,\n      scaleX = _ref.scaleX,\n      scaleY = _ref.scaleY,\n      transformPerspective = _ref.transformPerspective,\n      force3D = _ref.force3D,\n      target = _ref.target,\n      zOrigin = _ref.zOrigin,\n      transforms = \"\",\n      use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\n\n\n  if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\n    var angle = parseFloat(rotationY) * _DEG2RAD,\n        a13 = Math.sin(angle),\n        a33 = Math.cos(angle),\n        cos;\n\n    angle = parseFloat(rotationX) * _DEG2RAD;\n    cos = Math.cos(angle);\n    x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\n    y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\n    z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\n  }\n\n  if (transformPerspective !== _zeroPx) {\n    transforms += \"perspective(\" + transformPerspective + _endParenthesis;\n  }\n\n  if (xPercent || yPercent) {\n    transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\n  }\n\n  if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\n    transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\n  }\n\n  if (rotation !== _zeroDeg) {\n    transforms += \"rotate(\" + rotation + _endParenthesis;\n  }\n\n  if (rotationY !== _zeroDeg) {\n    transforms += \"rotateY(\" + rotationY + _endParenthesis;\n  }\n\n  if (rotationX !== _zeroDeg) {\n    transforms += \"rotateX(\" + rotationX + _endParenthesis;\n  }\n\n  if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\n    transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\n  }\n\n  if (scaleX !== 1 || scaleY !== 1) {\n    transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\n  }\n\n  target.style[_transformProp] = transforms || \"translate(0, 0)\";\n},\n    _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\n  var _ref2 = cache || this,\n      xPercent = _ref2.xPercent,\n      yPercent = _ref2.yPercent,\n      x = _ref2.x,\n      y = _ref2.y,\n      rotation = _ref2.rotation,\n      skewX = _ref2.skewX,\n      skewY = _ref2.skewY,\n      scaleX = _ref2.scaleX,\n      scaleY = _ref2.scaleY,\n      target = _ref2.target,\n      xOrigin = _ref2.xOrigin,\n      yOrigin = _ref2.yOrigin,\n      xOffset = _ref2.xOffset,\n      yOffset = _ref2.yOffset,\n      forceCSS = _ref2.forceCSS,\n      tx = parseFloat(x),\n      ty = parseFloat(y),\n      a11,\n      a21,\n      a12,\n      a22,\n      temp;\n\n  rotation = parseFloat(rotation);\n  skewX = parseFloat(skewX);\n  skewY = parseFloat(skewY);\n\n  if (skewY) {\n    //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n    skewY = parseFloat(skewY);\n    skewX += skewY;\n    rotation += skewY;\n  }\n\n  if (rotation || skewX) {\n    rotation *= _DEG2RAD;\n    skewX *= _DEG2RAD;\n    a11 = Math.cos(rotation) * scaleX;\n    a21 = Math.sin(rotation) * scaleX;\n    a12 = Math.sin(rotation - skewX) * -scaleY;\n    a22 = Math.cos(rotation - skewX) * scaleY;\n\n    if (skewX) {\n      skewY *= _DEG2RAD;\n      temp = Math.tan(skewX - skewY);\n      temp = Math.sqrt(1 + temp * temp);\n      a12 *= temp;\n      a22 *= temp;\n\n      if (skewY) {\n        temp = Math.tan(skewY);\n        temp = Math.sqrt(1 + temp * temp);\n        a11 *= temp;\n        a21 *= temp;\n      }\n    }\n\n    a11 = _round(a11);\n    a21 = _round(a21);\n    a12 = _round(a12);\n    a22 = _round(a22);\n  } else {\n    a11 = scaleX;\n    a22 = scaleY;\n    a21 = a12 = 0;\n  }\n\n  if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\n    tx = _convertToUnit(target, \"x\", x, \"px\");\n    ty = _convertToUnit(target, \"y\", y, \"px\");\n  }\n\n  if (xOrigin || yOrigin || xOffset || yOffset) {\n    tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\n    ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\n  }\n\n  if (xPercent || yPercent) {\n    //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the translation to simulate it.\n    temp = target.getBBox();\n    tx = _round(tx + xPercent / 100 * temp.width);\n    ty = _round(ty + yPercent / 100 * temp.height);\n  }\n\n  temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\n  target.setAttribute(\"transform\", temp);\n  forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\n},\n    _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {\n  var cap = 360,\n      isString = _isString(endValue),\n      endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\n      change = endNum - startNum,\n      finalValue = startNum + change + \"deg\",\n      direction,\n      pt;\n\n  if (isString) {\n    direction = endValue.split(\"_\")[1];\n\n    if (direction === \"short\") {\n      change %= cap;\n\n      if (change !== change % (cap / 2)) {\n        change += change < 0 ? cap : -cap;\n      }\n    }\n\n    if (direction === \"cw\" && change < 0) {\n      change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\n    } else if (direction === \"ccw\" && change > 0) {\n      change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\n    }\n  }\n\n  plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\n  pt.e = finalValue;\n  pt.u = \"deg\";\n\n  plugin._props.push(property);\n\n  return pt;\n},\n    _assign = function _assign(target, source) {\n  // Internet Explorer doesn't have Object.assign(), so we recreate it here.\n  for (var p in source) {\n    target[p] = source[p];\n  }\n\n  return target;\n},\n    _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\n  //for handling cases where someone passes in a whole transform string, like transform: \"scale(2, 3) rotate(20deg) translateY(30em)\"\n  var startCache = _assign({}, target._gsap),\n      exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\n      style = target.style,\n      endCache,\n      p,\n      startValue,\n      endValue,\n      startNum,\n      endNum,\n      startUnit,\n      endUnit;\n\n  if (startCache.svg) {\n    startValue = target.getAttribute(\"transform\");\n    target.setAttribute(\"transform\", \"\");\n    style[_transformProp] = transforms;\n    endCache = _parseTransform(target, 1);\n\n    _removeProperty(target, _transformProp);\n\n    target.setAttribute(\"transform\", startValue);\n  } else {\n    startValue = getComputedStyle(target)[_transformProp];\n    style[_transformProp] = transforms;\n    endCache = _parseTransform(target, 1);\n    style[_transformProp] = startValue;\n  }\n\n  for (p in _transformProps) {\n    startValue = startCache[p];\n    endValue = endCache[p];\n\n    if (startValue !== endValue && exclude.indexOf(p) < 0) {\n      //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n      startUnit = getUnit(startValue);\n      endUnit = getUnit(endValue);\n      startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\n      endNum = parseFloat(endValue);\n      plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\n      plugin._pt.u = endUnit || 0;\n\n      plugin._props.push(p);\n    }\n  }\n\n  _assign(endCache, startCache);\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\n\n\n_forEachName(\"padding,margin,Width,Radius\", function (name, index) {\n  var t = \"Top\",\n      r = \"Right\",\n      b = \"Bottom\",\n      l = \"Left\",\n      props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\n    return index < 2 ? name + side : \"border\" + side + name;\n  });\n\n  _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\n    var a, vars;\n\n    if (arguments.length < 4) {\n      // getter, passed target, property, and unit (from _get())\n      a = props.map(function (prop) {\n        return _get(plugin, prop, property);\n      });\n      vars = a.join(\" \");\n      return vars.split(a[0]).length === 5 ? a[0] : vars;\n    }\n\n    a = (endValue + \"\").split(\" \");\n    vars = {};\n    props.forEach(function (prop, i) {\n      return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\n    });\n    plugin.init(target, vars, tween);\n  };\n});\n\nexport var CSSPlugin = {\n  name: \"css\",\n  register: _initCore,\n  targetTest: function targetTest(target) {\n    return target.style && target.nodeType;\n  },\n  init: function init(target, vars, tween, index, targets) {\n    var props = this._props,\n        style = target.style,\n        startAt = tween.vars.startAt,\n        startValue,\n        endValue,\n        endNum,\n        startNum,\n        type,\n        specialProp,\n        p,\n        startUnit,\n        endUnit,\n        relative,\n        isTransformRelated,\n        transformPropTween,\n        cache,\n        smooth,\n        hasPriority,\n        inlineProps;\n    _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps\n\n    this.styles = this.styles || _getStyleSaver(target);\n    inlineProps = this.styles.props;\n    this.tween = tween;\n\n    for (p in vars) {\n      if (p === \"autoRound\") {\n        continue;\n      }\n\n      endValue = vars[p];\n\n      if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {\n        // plugins\n        continue;\n      }\n\n      type = typeof endValue;\n      specialProp = _specialProps[p];\n\n      if (type === \"function\") {\n        endValue = endValue.call(tween, index, target, targets);\n        type = typeof endValue;\n      }\n\n      if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\n        endValue = _replaceRandom(endValue);\n      }\n\n      if (specialProp) {\n        specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\n      } else if (p.substr(0, 2) === \"--\") {\n        //CSS variable\n        startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\n        endValue += \"\";\n        _colorExp.lastIndex = 0;\n\n        if (!_colorExp.test(startValue)) {\n          // colors don't have units\n          startUnit = getUnit(startValue);\n          endUnit = getUnit(endValue);\n        }\n\n        endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\n        this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\n        props.push(p);\n        inlineProps.push(p, 0, style[p]);\n      } else if (type !== \"undefined\") {\n        if (startAt && p in startAt) {\n          // in case someone hard-codes a complex value as the start, like top: \"calc(2vh / 2)\". Without this, it'd use the computed value (always in px)\n          startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\n          _isString(startValue) && ~startValue.indexOf(\"random(\") && (startValue = _replaceRandom(startValue));\n          getUnit(startValue + \"\") || startValue === \"auto\" || (startValue += _config.units[p] || getUnit(_get(target, p)) || \"\"); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\n\n          (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p)); // can't work with relative values\n        } else {\n          startValue = _get(target, p);\n        }\n\n        startNum = parseFloat(startValue);\n        relative = type === \"string\" && endValue.charAt(1) === \"=\" && endValue.substr(0, 2);\n        relative && (endValue = endValue.substr(2));\n        endNum = parseFloat(endValue);\n\n        if (p in _propertyAliases) {\n          if (p === \"autoAlpha\") {\n            //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\n            if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\n              //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n              startNum = 0;\n            }\n\n            inlineProps.push(\"visibility\", 0, style.visibility);\n\n            _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\n          }\n\n          if (p !== \"scale\" && p !== \"transform\") {\n            p = _propertyAliases[p];\n            ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\n          }\n        }\n\n        isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\n\n        if (isTransformRelated) {\n          this.styles.save(p);\n\n          if (!transformPropTween) {\n            cache = target._gsap;\n            cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\"translateX(50vw)\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\n\n            smooth = vars.smoothOrigin !== false && cache.smooth;\n            transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\n\n            transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\n          }\n\n          if (p === \"scale\") {\n            this._pt = new PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);\n            this._pt.u = 0;\n            props.push(\"scaleY\", p);\n            p += \"X\";\n          } else if (p === \"transformOrigin\") {\n            inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);\n            endValue = _convertKeywordsToPercentages(endValue); //in case something like \"left top\" or \"bottom right\" is passed in. Convert to percentages.\n\n            if (cache.svg) {\n              _applySVGOrigin(target, endValue, 0, smooth, 0, this);\n            } else {\n              endUnit = parseFloat(endValue.split(\" \")[2]) || 0; //handle the zOrigin separately!\n\n              endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\n\n              _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\n            }\n\n            continue;\n          } else if (p === \"svgOrigin\") {\n            _applySVGOrigin(target, endValue, 1, smooth, 0, this);\n\n            continue;\n          } else if (p in _rotationalProperties) {\n            _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);\n\n            continue;\n          } else if (p === \"smoothOrigin\") {\n            _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\n\n            continue;\n          } else if (p === \"force3D\") {\n            cache[p] = endValue;\n            continue;\n          } else if (p === \"transform\") {\n            _addRawTransformPTs(this, endValue, target);\n\n            continue;\n          }\n        } else if (!(p in style)) {\n          p = _checkPropPrefix(p) || p;\n        }\n\n        if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\n          startUnit = (startValue + \"\").substr((startNum + \"\").length);\n          endNum || (endNum = 0); // protect against NaN\n\n          endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);\n          startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\n          this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\n          this._pt.u = endUnit || 0;\n\n          if (startUnit !== endUnit && endUnit !== \"%\") {\n            //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \"b\" (beginning) property and point to a render method that handles that. (performance optimization)\n            this._pt.b = startValue;\n            this._pt.r = _renderCSSPropWithBeginning;\n          }\n        } else if (!(p in style)) {\n          if (p in target) {\n            //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\n            this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);\n          } else if (p !== \"parseTransform\") {\n            _missingPlugin(p, endValue);\n\n            continue;\n          }\n        } else {\n          _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);\n        }\n\n        isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p]));\n        props.push(p);\n      }\n    }\n\n    hasPriority && _sortPropTweensByPriority(this);\n  },\n  render: function render(ratio, data) {\n    if (data.tween._time || !_reverting()) {\n      var pt = data._pt;\n\n      while (pt) {\n        pt.r(ratio, pt.d);\n        pt = pt._next;\n      }\n    } else {\n      data.styles.revert();\n    }\n  },\n  get: _get,\n  aliases: _propertyAliases,\n  getSetter: function getSetter(target, property, plugin) {\n    //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \"x\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\n    var p = _propertyAliases[property];\n    p && p.indexOf(\",\") < 0 && (property = p);\n    return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : _getSetter(target, property);\n  },\n  core: {\n    _removeProperty: _removeProperty,\n    _getMatrix: _getMatrix\n  }\n};\ngsap.utils.checkPrefix = _checkPropPrefix;\ngsap.core.getStyleSaver = _getStyleSaver;\n\n(function (positionAndScale, rotation, others, aliases) {\n  var all = _forEachName(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\n    _transformProps[name] = 1;\n  });\n\n  _forEachName(rotation, function (name) {\n    _config.units[name] = \"deg\";\n    _rotationalProperties[name] = 1;\n  });\n\n  _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\n\n  _forEachName(aliases, function (name) {\n    var split = name.split(\":\");\n    _propertyAliases[split[1]] = all[split[0]];\n  });\n})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\n\n_forEachName(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\n  _config.units[name] = \"px\";\n});\n\ngsap.registerPlugin(CSSPlugin);\nexport { CSSPlugin as default, _getBBox, _createElement, _checkPropPrefix as checkPrefix };","import { gsap, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ, TweenLite, TimelineLite, TimelineMax } from \"./gsap-core.js\";\nimport { CSSPlugin } from \"./CSSPlugin.js\";\nvar gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,\n    // to protect from tree shaking\nTweenMaxWithCSS = gsapWithCSS.core.Tween;\nexport { gsapWithCSS as gsap, gsapWithCSS as default, CSSPlugin, TweenMaxWithCSS as TweenMax, TweenLite, TimelineMax, TimelineLite, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };","/*!\n * @gsap/react 2.1.1\n * https://gsap.com\n *\n * Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n/* eslint-disable */\nimport { useEffect, useLayoutEffect, useRef } from \"react\";\nimport gsap from \"gsap\";\n\nlet useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect,\n    isConfig = value => value && !Array.isArray(value) && typeof(value) === \"object\",\n    emptyArray = [],\n    defaultConfig = {},\n    _gsap = gsap; // accommodates situations where different versions of GSAP may be loaded, so a user can gsap.registerPlugin(useGSAP);\n\nexport const useGSAP = (callback, dependencies = emptyArray) => {\n  let config = defaultConfig;\n  if (isConfig(callback)) {\n    config = callback;\n    callback = null;\n    dependencies = \"dependencies\" in config ? config.dependencies : emptyArray;\n  } else if (isConfig(dependencies)) {\n    config = dependencies;\n    dependencies = \"dependencies\" in config ? config.dependencies : emptyArray;\n  }\n  (callback && typeof callback !== \"function\") && console.warn(\"First parameter must be a function or config object\");\n  const { scope, revertOnUpdate } = config,\n        mounted = useRef(false),\n        context = useRef(_gsap.context(() => { }, scope)),\n        contextSafe = useRef((func) => context.current.add(null, func)),\n        deferCleanup = dependencies && dependencies.length && !revertOnUpdate;\n  useIsomorphicLayoutEffect(() => {\n    callback && context.current.add(callback, scope);\n    if (!deferCleanup || !mounted.current) { // React renders bottom-up, thus there could be hooks with dependencies that run BEFORE the component mounts, thus cleanup wouldn't occur since a hook with an empty dependency Array would only run once the component mounts.\n      return () => context.current.revert();\n    }\n  }, dependencies);\n  deferCleanup && useIsomorphicLayoutEffect(() => {\n      mounted.current = true;\n      return () => context.current.revert();\n    }, emptyArray);\n  return { context: context.current, contextSafe: contextSafe.current };\n};\nuseGSAP.register = core => { _gsap = core; };\nuseGSAP.headless = true; // doesn't require the window to be registered.\n","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/*!\n * Observer 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar gsap,\n    _coreInitted,\n    _clamp,\n    _win,\n    _doc,\n    _docEl,\n    _body,\n    _isTouch,\n    _pointerType,\n    ScrollTrigger,\n    _root,\n    _normalizer,\n    _eventTypes,\n    _context,\n    _getGSAP = function _getGSAP() {\n  return gsap || typeof window !== \"undefined\" && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n    _startup = 1,\n    _observers = [],\n    _scrollers = [],\n    _proxies = [],\n    _getTime = Date.now,\n    _bridge = function _bridge(name, value) {\n  return value;\n},\n    _integrate = function _integrate() {\n  var core = ScrollTrigger.core,\n      data = core.bridge || {},\n      scrollers = core._scrollers,\n      proxies = core._proxies;\n  scrollers.push.apply(scrollers, _scrollers);\n  proxies.push.apply(proxies, _proxies);\n  _scrollers = scrollers;\n  _proxies = proxies;\n\n  _bridge = function _bridge(name, value) {\n    return data[name](value);\n  };\n},\n    _getProxyProp = function _getProxyProp(element, property) {\n  return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];\n},\n    _isViewport = function _isViewport(el) {\n  return !!~_root.indexOf(el);\n},\n    _addListener = function _addListener(element, type, func, passive, capture) {\n  return element.addEventListener(type, func, {\n    passive: passive !== false,\n    capture: !!capture\n  });\n},\n    _removeListener = function _removeListener(element, type, func, capture) {\n  return element.removeEventListener(type, func, !!capture);\n},\n    _scrollLeft = \"scrollLeft\",\n    _scrollTop = \"scrollTop\",\n    _onScroll = function _onScroll() {\n  return _normalizer && _normalizer.isPressed || _scrollers.cache++;\n},\n    _scrollCacheFunc = function _scrollCacheFunc(f, doNotCache) {\n  var cachingFunc = function cachingFunc(value) {\n    // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a \"scroll\" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when \"soft\" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother)\n    if (value || value === 0) {\n      _startup && (_win.history.scrollRestoration = \"manual\"); // otherwise the new position will get overwritten by the browser onload.\n\n      var isNormalizing = _normalizer && _normalizer.isPressed;\n      value = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0); //TODO: iOS Bug: if you allow it to go to 0, Safari can start to report super strange (wildly inaccurate) touch positions!\n\n      f(value);\n      cachingFunc.cacheID = _scrollers.cache;\n      isNormalizing && _bridge(\"ss\", value); // set scroll (notify ScrollTrigger so it can dispatch a \"scrollStart\" event if necessary\n    } else if (doNotCache || _scrollers.cache !== cachingFunc.cacheID || _bridge(\"ref\")) {\n      cachingFunc.cacheID = _scrollers.cache;\n      cachingFunc.v = f();\n    }\n\n    return cachingFunc.v + cachingFunc.offset;\n  };\n\n  cachingFunc.offset = 0;\n  return f && cachingFunc;\n},\n    _horizontal = {\n  s: _scrollLeft,\n  p: \"left\",\n  p2: \"Left\",\n  os: \"right\",\n  os2: \"Right\",\n  d: \"width\",\n  d2: \"Width\",\n  a: \"x\",\n  sc: _scrollCacheFunc(function (value) {\n    return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;\n  })\n},\n    _vertical = {\n  s: _scrollTop,\n  p: \"top\",\n  p2: \"Top\",\n  os: \"bottom\",\n  os2: \"Bottom\",\n  d: \"height\",\n  d2: \"Height\",\n  a: \"y\",\n  op: _horizontal,\n  sc: _scrollCacheFunc(function (value) {\n    return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;\n  })\n},\n    _getTarget = function _getTarget(t, self) {\n  return (self && self._ctx && self._ctx.selector || gsap.utils.toArray)(t)[0] || (typeof t === \"string\" && gsap.config().nullTargetWarn !== false ? console.warn(\"Element not found:\", t) : null);\n},\n    _getScrollFunc = function _getScrollFunc(element, _ref) {\n  var s = _ref.s,\n      sc = _ref.sc;\n  // we store the scroller functions in an alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a \".rec\" property in order to revert to that after refreshing to ensure things don't shift around.\n  _isViewport(element) && (element = _doc.scrollingElement || _docEl);\n\n  var i = _scrollers.indexOf(element),\n      offset = sc === _vertical.sc ? 1 : 2;\n\n  !~i && (i = _scrollers.push(element) - 1);\n  _scrollers[i + offset] || _addListener(element, \"scroll\", _onScroll); // clear the cache when a scroll occurs\n\n  var prev = _scrollers[i + offset],\n      func = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function (value) {\n    return arguments.length ? element[s] = value : element[s];\n  })));\n  func.target = element;\n  prev || (func.smooth = gsap.getProperty(element, \"scrollBehavior\") === \"smooth\"); // only set it the first time (don't reset every time a scrollFunc is requested because perhaps it happens during a refresh() when it's disabled in ScrollTrigger.\n\n  return func;\n},\n    _getVelocityProp = function _getVelocityProp(value, minTimeRefresh, useDelta) {\n  var v1 = value,\n      v2 = value,\n      t1 = _getTime(),\n      t2 = t1,\n      min = minTimeRefresh || 50,\n      dropToZeroTime = Math.max(500, min * 3),\n      update = function update(value, force) {\n    var t = _getTime();\n\n    if (force || t - t1 > min) {\n      v2 = v1;\n      v1 = value;\n      t2 = t1;\n      t1 = t;\n    } else if (useDelta) {\n      v1 += value;\n    } else {\n      // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb.\n      v1 = v2 + (value - v2) / (t - t2) * (t1 - t2);\n    }\n  },\n      reset = function reset() {\n    v2 = v1 = useDelta ? 0 : v1;\n    t2 = t1 = 0;\n  },\n      getVelocity = function getVelocity(latestValue) {\n    var tOld = t2,\n        vOld = v2,\n        t = _getTime();\n\n    (latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);\n    return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;\n  };\n\n  return {\n    update: update,\n    reset: reset,\n    getVelocity: getVelocity\n  };\n},\n    _getEvent = function _getEvent(e, preventDefault) {\n  preventDefault && !e._gsapAllow && e.preventDefault();\n  return e.changedTouches ? e.changedTouches[0] : e;\n},\n    _getAbsoluteMax = function _getAbsoluteMax(a) {\n  var max = Math.max.apply(Math, a),\n      min = Math.min.apply(Math, a);\n  return Math.abs(max) >= Math.abs(min) ? max : min;\n},\n    _setScrollTrigger = function _setScrollTrigger() {\n  ScrollTrigger = gsap.core.globals().ScrollTrigger;\n  ScrollTrigger && ScrollTrigger.core && _integrate();\n},\n    _initCore = function _initCore(core) {\n  gsap = core || _getGSAP();\n\n  if (!_coreInitted && gsap && typeof document !== \"undefined\" && document.body) {\n    _win = window;\n    _doc = document;\n    _docEl = _doc.documentElement;\n    _body = _doc.body;\n    _root = [_win, _doc, _docEl, _body];\n    _clamp = gsap.utils.clamp;\n\n    _context = gsap.core.context || function () {};\n\n    _pointerType = \"onpointerenter\" in _body ? \"pointer\" : \"mouse\"; // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\n\n    _isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia(\"(hover: none), (pointer: coarse)\").matches ? 1 : \"ontouchstart\" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0;\n    _eventTypes = Observer.eventTypes = (\"ontouchstart\" in _docEl ? \"touchstart,touchmove,touchcancel,touchend\" : !(\"onpointerdown\" in _docEl) ? \"mousedown,mousemove,mouseup,mouseup\" : \"pointerdown,pointermove,pointercancel,pointerup\").split(\",\");\n    setTimeout(function () {\n      return _startup = 0;\n    }, 500);\n\n    _setScrollTrigger();\n\n    _coreInitted = 1;\n  }\n\n  return _coreInitted;\n};\n\n_horizontal.op = _vertical;\n_scrollers.cache = 0;\nexport var Observer = /*#__PURE__*/function () {\n  function Observer(vars) {\n    this.init(vars);\n  }\n\n  var _proto = Observer.prototype;\n\n  _proto.init = function init(vars) {\n    _coreInitted || _initCore(gsap) || console.warn(\"Please gsap.registerPlugin(Observer)\");\n    ScrollTrigger || _setScrollTrigger();\n    var tolerance = vars.tolerance,\n        dragMinimum = vars.dragMinimum,\n        type = vars.type,\n        target = vars.target,\n        lineHeight = vars.lineHeight,\n        debounce = vars.debounce,\n        preventDefault = vars.preventDefault,\n        onStop = vars.onStop,\n        onStopDelay = vars.onStopDelay,\n        ignore = vars.ignore,\n        wheelSpeed = vars.wheelSpeed,\n        event = vars.event,\n        onDragStart = vars.onDragStart,\n        onDragEnd = vars.onDragEnd,\n        onDrag = vars.onDrag,\n        onPress = vars.onPress,\n        onRelease = vars.onRelease,\n        onRight = vars.onRight,\n        onLeft = vars.onLeft,\n        onUp = vars.onUp,\n        onDown = vars.onDown,\n        onChangeX = vars.onChangeX,\n        onChangeY = vars.onChangeY,\n        onChange = vars.onChange,\n        onToggleX = vars.onToggleX,\n        onToggleY = vars.onToggleY,\n        onHover = vars.onHover,\n        onHoverEnd = vars.onHoverEnd,\n        onMove = vars.onMove,\n        ignoreCheck = vars.ignoreCheck,\n        isNormalizer = vars.isNormalizer,\n        onGestureStart = vars.onGestureStart,\n        onGestureEnd = vars.onGestureEnd,\n        onWheel = vars.onWheel,\n        onEnable = vars.onEnable,\n        onDisable = vars.onDisable,\n        onClick = vars.onClick,\n        scrollSpeed = vars.scrollSpeed,\n        capture = vars.capture,\n        allowClicks = vars.allowClicks,\n        lockAxis = vars.lockAxis,\n        onLockAxis = vars.onLockAxis;\n    this.target = target = _getTarget(target) || _docEl;\n    this.vars = vars;\n    ignore && (ignore = gsap.utils.toArray(ignore));\n    tolerance = tolerance || 1e-9;\n    dragMinimum = dragMinimum || 0;\n    wheelSpeed = wheelSpeed || 1;\n    scrollSpeed = scrollSpeed || 1;\n    type = type || \"wheel,touch,pointer\";\n    debounce = debounce !== false;\n    lineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report \"normal\", so default to 22.\n\n    var id,\n        onStopDelayedCall,\n        dragged,\n        moved,\n        wheeled,\n        locked,\n        axis,\n        self = this,\n        prevDeltaX = 0,\n        prevDeltaY = 0,\n        passive = vars.passive || !preventDefault,\n        scrollFuncX = _getScrollFunc(target, _horizontal),\n        scrollFuncY = _getScrollFunc(target, _vertical),\n        scrollX = scrollFuncX(),\n        scrollY = scrollFuncY(),\n        limitToTouch = ~type.indexOf(\"touch\") && !~type.indexOf(\"pointer\") && _eventTypes[0] === \"pointerdown\",\n        // for devices that accommodate mouse events and touch events, we need to distinguish.\n    isViewport = _isViewport(target),\n        ownerDoc = target.ownerDocument || _doc,\n        deltaX = [0, 0, 0],\n        // wheel, scroll, pointer/touch\n    deltaY = [0, 0, 0],\n        onClickTime = 0,\n        clickCapture = function clickCapture() {\n      return onClickTime = _getTime();\n    },\n        _ignoreCheck = function _ignoreCheck(e, isPointerOrTouch) {\n      return (self.event = e) && ignore && ~ignore.indexOf(e.target) || isPointerOrTouch && limitToTouch && e.pointerType !== \"touch\" || ignoreCheck && ignoreCheck(e, isPointerOrTouch);\n    },\n        onStopFunc = function onStopFunc() {\n      self._vx.reset();\n\n      self._vy.reset();\n\n      onStopDelayedCall.pause();\n      onStop && onStop(self);\n    },\n        update = function update() {\n      var dx = self.deltaX = _getAbsoluteMax(deltaX),\n          dy = self.deltaY = _getAbsoluteMax(deltaY),\n          changedX = Math.abs(dx) >= tolerance,\n          changedY = Math.abs(dy) >= tolerance;\n\n      onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out.\n\n      if (changedX) {\n        onRight && self.deltaX > 0 && onRight(self);\n        onLeft && self.deltaX < 0 && onLeft(self);\n        onChangeX && onChangeX(self);\n        onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self);\n        prevDeltaX = self.deltaX;\n        deltaX[0] = deltaX[1] = deltaX[2] = 0;\n      }\n\n      if (changedY) {\n        onDown && self.deltaY > 0 && onDown(self);\n        onUp && self.deltaY < 0 && onUp(self);\n        onChangeY && onChangeY(self);\n        onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self);\n        prevDeltaY = self.deltaY;\n        deltaY[0] = deltaY[1] = deltaY[2] = 0;\n      }\n\n      if (moved || dragged) {\n        onMove && onMove(self);\n\n        if (dragged) {\n          onDrag(self);\n          dragged = false;\n        }\n\n        moved = false;\n      }\n\n      locked && !(locked = false) && onLockAxis && onLockAxis(self);\n\n      if (wheeled) {\n        onWheel(self);\n        wheeled = false;\n      }\n\n      id = 0;\n    },\n        onDelta = function onDelta(x, y, index) {\n      deltaX[index] += x;\n      deltaY[index] += y;\n\n      self._vx.update(x);\n\n      self._vy.update(y);\n\n      debounce ? id || (id = requestAnimationFrame(update)) : update();\n    },\n        onTouchOrPointerDelta = function onTouchOrPointerDelta(x, y) {\n      if (lockAxis && !axis) {\n        self.axis = axis = Math.abs(x) > Math.abs(y) ? \"x\" : \"y\";\n        locked = true;\n      }\n\n      if (axis !== \"y\") {\n        deltaX[2] += x;\n\n        self._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll.\n\n      }\n\n      if (axis !== \"x\") {\n        deltaY[2] += y;\n\n        self._vy.update(y, true);\n      }\n\n      debounce ? id || (id = requestAnimationFrame(update)) : update();\n    },\n        _onDrag = function _onDrag(e) {\n      if (_ignoreCheck(e, 1)) {\n        return;\n      }\n\n      e = _getEvent(e, preventDefault);\n      var x = e.clientX,\n          y = e.clientY,\n          dx = x - self.x,\n          dy = y - self.y,\n          isDragging = self.isDragging;\n      self.x = x;\n      self.y = y;\n\n      if (isDragging || Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum) {\n        onDrag && (dragged = true);\n        isDragging || (self.isDragging = true);\n        onTouchOrPointerDelta(dx, dy);\n        isDragging || onDragStart && onDragStart(self);\n      }\n    },\n        _onPress = self.onPress = function (e) {\n      if (_ignoreCheck(e, 1) || e && e.button) {\n        return;\n      }\n\n      self.axis = axis = null;\n      onStopDelayedCall.pause();\n      self.isPressed = true;\n      e = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though.\n\n      prevDeltaX = prevDeltaY = 0;\n      self.startX = self.x = e.clientX;\n      self.startY = self.y = e.clientY;\n\n      self._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0.\n\n\n      self._vy.reset();\n\n      _addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);\n\n      self.deltaX = self.deltaY = 0;\n      onPress && onPress(self);\n    },\n        _onRelease = self.onRelease = function (e) {\n      if (_ignoreCheck(e, 1)) {\n        return;\n      }\n\n      _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\n\n      var isTrackingDrag = !isNaN(self.y - self.startY),\n          wasDragging = self.isDragging,\n          isDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3),\n          // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels.\n      eventData = _getEvent(e);\n\n      if (!isDragNotClick && isTrackingDrag) {\n        self._vx.reset();\n\n        self._vy.reset(); //if (preventDefault && allowClicks && self.isPressed) { // check isPressed because in a rare edge case, the inputObserver in ScrollTrigger may stopPropagation() on the press/drag, so the onRelease may get fired without the onPress/onDrag ever getting called, thus it could trigger a click to occur on a link after scroll-dragging it.\n\n\n        if (preventDefault && allowClicks) {\n          gsap.delayedCall(0.08, function () {\n            // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular \"click\" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the \"real\"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the \"real\" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched.\n            if (_getTime() - onClickTime > 300 && !e.defaultPrevented) {\n              if (e.target.click) {\n                //some browsers (like mobile Safari) don't properly trigger the click event\n                e.target.click();\n              } else if (ownerDoc.createEvent) {\n                var syntheticEvent = ownerDoc.createEvent(\"MouseEvents\");\n                syntheticEvent.initMouseEvent(\"click\", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);\n                e.target.dispatchEvent(syntheticEvent);\n              }\n            }\n          });\n        }\n      }\n\n      self.isDragging = self.isGesturing = self.isPressed = false;\n      onStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);\n      onDragEnd && wasDragging && onDragEnd(self);\n      onRelease && onRelease(self, isDragNotClick);\n    },\n        _onGestureStart = function _onGestureStart(e) {\n      return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging);\n    },\n        _onGestureEnd = function _onGestureEnd() {\n      return (self.isGesturing = false) || onGestureEnd(self);\n    },\n        onScroll = function onScroll(e) {\n      if (_ignoreCheck(e)) {\n        return;\n      }\n\n      var x = scrollFuncX(),\n          y = scrollFuncY();\n      onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);\n      scrollX = x;\n      scrollY = y;\n      onStop && onStopDelayedCall.restart(true);\n    },\n        _onWheel = function _onWheel(e) {\n      if (_ignoreCheck(e)) {\n        return;\n      }\n\n      e = _getEvent(e, preventDefault);\n      onWheel && (wheeled = true);\n      var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed;\n      onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);\n      onStop && !isNormalizer && onStopDelayedCall.restart(true);\n    },\n        _onMove = function _onMove(e) {\n      if (_ignoreCheck(e)) {\n        return;\n      }\n\n      var x = e.clientX,\n          y = e.clientY,\n          dx = x - self.x,\n          dy = y - self.y;\n      self.x = x;\n      self.y = y;\n      moved = true;\n      onStop && onStopDelayedCall.restart(true);\n      (dx || dy) && onTouchOrPointerDelta(dx, dy);\n    },\n        _onHover = function _onHover(e) {\n      self.event = e;\n      onHover(self);\n    },\n        _onHoverEnd = function _onHoverEnd(e) {\n      self.event = e;\n      onHoverEnd(self);\n    },\n        _onClick = function _onClick(e) {\n      return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self);\n    };\n\n    onStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause();\n    self.deltaX = self.deltaY = 0;\n    self._vx = _getVelocityProp(0, 50, true);\n    self._vy = _getVelocityProp(0, 50, true);\n    self.scrollX = scrollFuncX;\n    self.scrollY = scrollFuncY;\n    self.isDragging = self.isGesturing = self.isPressed = false;\n\n    _context(this);\n\n    self.enable = function (e) {\n      if (!self.isEnabled) {\n        _addListener(isViewport ? ownerDoc : target, \"scroll\", _onScroll);\n\n        type.indexOf(\"scroll\") >= 0 && _addListener(isViewport ? ownerDoc : target, \"scroll\", onScroll, passive, capture);\n        type.indexOf(\"wheel\") >= 0 && _addListener(target, \"wheel\", _onWheel, passive, capture);\n\n        if (type.indexOf(\"touch\") >= 0 && _isTouch || type.indexOf(\"pointer\") >= 0) {\n          _addListener(target, _eventTypes[0], _onPress, passive, capture);\n\n          _addListener(ownerDoc, _eventTypes[2], _onRelease);\n\n          _addListener(ownerDoc, _eventTypes[3], _onRelease);\n\n          allowClicks && _addListener(target, \"click\", clickCapture, true, true);\n          onClick && _addListener(target, \"click\", _onClick);\n          onGestureStart && _addListener(ownerDoc, \"gesturestart\", _onGestureStart);\n          onGestureEnd && _addListener(ownerDoc, \"gestureend\", _onGestureEnd);\n          onHover && _addListener(target, _pointerType + \"enter\", _onHover);\n          onHoverEnd && _addListener(target, _pointerType + \"leave\", _onHoverEnd);\n          onMove && _addListener(target, _pointerType + \"move\", _onMove);\n        }\n\n        self.isEnabled = true;\n        e && e.type && _onPress(e);\n        onEnable && onEnable(self);\n      }\n\n      return self;\n    };\n\n    self.disable = function () {\n      if (self.isEnabled) {\n        // only remove the _onScroll listener if there aren't any others that rely on the functionality.\n        _observers.filter(function (o) {\n          return o !== self && _isViewport(o.target);\n        }).length || _removeListener(isViewport ? ownerDoc : target, \"scroll\", _onScroll);\n\n        if (self.isPressed) {\n          self._vx.reset();\n\n          self._vy.reset();\n\n          _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\n        }\n\n        _removeListener(isViewport ? ownerDoc : target, \"scroll\", onScroll, capture);\n\n        _removeListener(target, \"wheel\", _onWheel, capture);\n\n        _removeListener(target, _eventTypes[0], _onPress, capture);\n\n        _removeListener(ownerDoc, _eventTypes[2], _onRelease);\n\n        _removeListener(ownerDoc, _eventTypes[3], _onRelease);\n\n        _removeListener(target, \"click\", clickCapture, true);\n\n        _removeListener(target, \"click\", _onClick);\n\n        _removeListener(ownerDoc, \"gesturestart\", _onGestureStart);\n\n        _removeListener(ownerDoc, \"gestureend\", _onGestureEnd);\n\n        _removeListener(target, _pointerType + \"enter\", _onHover);\n\n        _removeListener(target, _pointerType + \"leave\", _onHoverEnd);\n\n        _removeListener(target, _pointerType + \"move\", _onMove);\n\n        self.isEnabled = self.isPressed = self.isDragging = false;\n        onDisable && onDisable(self);\n      }\n    };\n\n    self.kill = self.revert = function () {\n      self.disable();\n\n      var i = _observers.indexOf(self);\n\n      i >= 0 && _observers.splice(i, 1);\n      _normalizer === self && (_normalizer = 0);\n    };\n\n    _observers.push(self);\n\n    isNormalizer && _isViewport(target) && (_normalizer = self);\n    self.enable(event);\n  };\n\n  _createClass(Observer, [{\n    key: \"velocityX\",\n    get: function get() {\n      return this._vx.getVelocity();\n    }\n  }, {\n    key: \"velocityY\",\n    get: function get() {\n      return this._vy.getVelocity();\n    }\n  }]);\n\n  return Observer;\n}();\nObserver.version = \"3.12.5\";\n\nObserver.create = function (vars) {\n  return new Observer(vars);\n};\n\nObserver.register = _initCore;\n\nObserver.getAll = function () {\n  return _observers.slice();\n};\n\nObserver.getById = function (id) {\n  return _observers.filter(function (o) {\n    return o.vars.id === id;\n  })[0];\n};\n\n_getGSAP() && gsap.registerPlugin(Observer);\nexport { Observer as default, _isViewport, _scrollers, _getScrollFunc, _getProxyProp, _proxies, _getVelocityProp, _vertical, _horizontal, _getTarget };","/*!\n * ScrollTrigger 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { Observer, _getTarget, _vertical, _horizontal, _scrollers, _proxies, _getScrollFunc, _getProxyProp, _getVelocityProp } from \"./Observer.js\";\n\nvar gsap,\n    _coreInitted,\n    _win,\n    _doc,\n    _docEl,\n    _body,\n    _root,\n    _resizeDelay,\n    _toArray,\n    _clamp,\n    _time2,\n    _syncInterval,\n    _refreshing,\n    _pointerIsDown,\n    _transformProp,\n    _i,\n    _prevWidth,\n    _prevHeight,\n    _autoRefresh,\n    _sort,\n    _suppressOverwrites,\n    _ignoreResize,\n    _normalizer,\n    _ignoreMobileResize,\n    _baseScreenHeight,\n    _baseScreenWidth,\n    _fixIOSBug,\n    _context,\n    _scrollRestoration,\n    _div100vh,\n    _100vh,\n    _isReverted,\n    _clampingMax,\n    _limitCallbacks,\n    // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\n_startup = 1,\n    _getTime = Date.now,\n    _time1 = _getTime(),\n    _lastScrollTime = 0,\n    _enabled = 0,\n    _parseClamp = function _parseClamp(value, type, self) {\n  var clamp = _isString(value) && (value.substr(0, 6) === \"clamp(\" || value.indexOf(\"max\") > -1);\n  self[\"_\" + type + \"Clamp\"] = clamp;\n  return clamp ? value.substr(6, value.length - 7) : value;\n},\n    _keepClamp = function _keepClamp(value, clamp) {\n  return clamp && (!_isString(value) || value.substr(0, 6) !== \"clamp(\") ? \"clamp(\" + value + \")\" : value;\n},\n    _rafBugFix = function _rafBugFix() {\n  return _enabled && requestAnimationFrame(_rafBugFix);\n},\n    // in some browsers (like Firefox), screen repaints weren't consistent unless we had SOMETHING queued up in requestAnimationFrame()! So this just creates a super simple loop to keep it alive and smooth out repaints.\n_pointerDownHandler = function _pointerDownHandler() {\n  return _pointerIsDown = 1;\n},\n    _pointerUpHandler = function _pointerUpHandler() {\n  return _pointerIsDown = 0;\n},\n    _passThrough = function _passThrough(v) {\n  return v;\n},\n    _round = function _round(value) {\n  return Math.round(value * 100000) / 100000 || 0;\n},\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _getGSAP = function _getGSAP() {\n  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n    _isViewport = function _isViewport(e) {\n  return !!~_root.indexOf(e);\n},\n    _getViewportDimension = function _getViewportDimension(dimensionProperty) {\n  return (dimensionProperty === \"Height\" ? _100vh : _win[\"inner\" + dimensionProperty]) || _docEl[\"client\" + dimensionProperty] || _body[\"client\" + dimensionProperty];\n},\n    _getBoundsFunc = function _getBoundsFunc(element) {\n  return _getProxyProp(element, \"getBoundingClientRect\") || (_isViewport(element) ? function () {\n    _winOffsets.width = _win.innerWidth;\n    _winOffsets.height = _100vh;\n    return _winOffsets;\n  } : function () {\n    return _getBounds(element);\n  });\n},\n    _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref) {\n  var d = _ref.d,\n      d2 = _ref.d2,\n      a = _ref.a;\n  return (a = _getProxyProp(scroller, \"getBoundingClientRect\")) ? function () {\n    return a()[d];\n  } : function () {\n    return (isViewport ? _getViewportDimension(d2) : scroller[\"client\" + d2]) || 0;\n  };\n},\n    _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {\n  return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function () {\n    return _winOffsets;\n  };\n},\n    _maxScroll = function _maxScroll(element, _ref2) {\n  var s = _ref2.s,\n      d2 = _ref2.d2,\n      d = _ref2.d,\n      a = _ref2.a;\n  return Math.max(0, (s = \"scroll\" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? (_docEl[s] || _body[s]) - _getViewportDimension(d2) : element[s] - element[\"offset\" + d2]);\n},\n    _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {\n  for (var i = 0; i < _autoRefresh.length; i += 3) {\n    (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);\n  }\n},\n    _isString = function _isString(value) {\n  return typeof value === \"string\";\n},\n    _isFunction = function _isFunction(value) {\n  return typeof value === \"function\";\n},\n    _isNumber = function _isNumber(value) {\n  return typeof value === \"number\";\n},\n    _isObject = function _isObject(value) {\n  return typeof value === \"object\";\n},\n    _endAnimation = function _endAnimation(animation, reversed, pause) {\n  return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();\n},\n    _callback = function _callback(self, func) {\n  if (self.enabled) {\n    var result = self._ctx ? self._ctx.add(function () {\n      return func(self);\n    }) : func(self);\n    result && result.totalTime && (self.callbackAnimation = result);\n  }\n},\n    _abs = Math.abs,\n    _left = \"left\",\n    _top = \"top\",\n    _right = \"right\",\n    _bottom = \"bottom\",\n    _width = \"width\",\n    _height = \"height\",\n    _Right = \"Right\",\n    _Left = \"Left\",\n    _Top = \"Top\",\n    _Bottom = \"Bottom\",\n    _padding = \"padding\",\n    _margin = \"margin\",\n    _Width = \"Width\",\n    _Height = \"Height\",\n    _px = \"px\",\n    _getComputedStyle = function _getComputedStyle(element) {\n  return _win.getComputedStyle(element);\n},\n    _makePositionable = function _makePositionable(element) {\n  // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative\n  var position = _getComputedStyle(element).position;\n\n  element.style.position = position === \"absolute\" || position === \"fixed\" ? position : \"relative\";\n},\n    _setDefaults = function _setDefaults(obj, defaults) {\n  for (var p in defaults) {\n    p in obj || (obj[p] = defaults[p]);\n  }\n\n  return obj;\n},\n    _getBounds = function _getBounds(element, withoutTransforms) {\n  var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \"matrix(1, 0, 0, 1, 0, 0)\" && gsap.to(element, {\n    x: 0,\n    y: 0,\n    xPercent: 0,\n    yPercent: 0,\n    rotation: 0,\n    rotationX: 0,\n    rotationY: 0,\n    scale: 1,\n    skewX: 0,\n    skewY: 0\n  }).progress(1),\n      bounds = element.getBoundingClientRect();\n  tween && tween.progress(0).kill();\n  return bounds;\n},\n    _getSize = function _getSize(element, _ref3) {\n  var d2 = _ref3.d2;\n  return element[\"offset\" + d2] || element[\"client\" + d2] || 0;\n},\n    _getLabelRatioArray = function _getLabelRatioArray(timeline) {\n  var a = [],\n      labels = timeline.labels,\n      duration = timeline.duration(),\n      p;\n\n  for (p in labels) {\n    a.push(labels[p] / duration);\n  }\n\n  return a;\n},\n    _getClosestLabel = function _getClosestLabel(animation) {\n  return function (value) {\n    return gsap.utils.snap(_getLabelRatioArray(animation), value);\n  };\n},\n    _snapDirectional = function _snapDirectional(snapIncrementOrArray) {\n  var snap = gsap.utils.snap(snapIncrementOrArray),\n      a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) {\n    return a - b;\n  });\n  return a ? function (value, direction, threshold) {\n    if (threshold === void 0) {\n      threshold = 1e-3;\n    }\n\n    var i;\n\n    if (!direction) {\n      return snap(value);\n    }\n\n    if (direction > 0) {\n      value -= threshold; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again.\n\n      for (i = 0; i < a.length; i++) {\n        if (a[i] >= value) {\n          return a[i];\n        }\n      }\n\n      return a[i - 1];\n    } else {\n      i = a.length;\n      value += threshold;\n\n      while (i--) {\n        if (a[i] <= value) {\n          return a[i];\n        }\n      }\n    }\n\n    return a[0];\n  } : function (value, direction, threshold) {\n    if (threshold === void 0) {\n      threshold = 1e-3;\n    }\n\n    var snapped = snap(value);\n    return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);\n  };\n},\n    _getLabelAtDirection = function _getLabelAtDirection(timeline) {\n  return function (value, st) {\n    return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction);\n  };\n},\n    _multiListener = function _multiListener(func, element, types, callback) {\n  return types.split(\",\").forEach(function (type) {\n    return func(element, type, callback);\n  });\n},\n    _addListener = function _addListener(element, type, func, nonPassive, capture) {\n  return element.addEventListener(type, func, {\n    passive: !nonPassive,\n    capture: !!capture\n  });\n},\n    _removeListener = function _removeListener(element, type, func, capture) {\n  return element.removeEventListener(type, func, !!capture);\n},\n    _wheelListener = function _wheelListener(func, el, scrollFunc) {\n  scrollFunc = scrollFunc && scrollFunc.wheelHandler;\n\n  if (scrollFunc) {\n    func(el, \"wheel\", scrollFunc);\n    func(el, \"touchmove\", scrollFunc);\n  }\n},\n    _markerDefaults = {\n  startColor: \"green\",\n  endColor: \"red\",\n  indent: 0,\n  fontSize: \"16px\",\n  fontWeight: \"normal\"\n},\n    _defaults = {\n  toggleActions: \"play\",\n  anticipatePin: 0\n},\n    _keywords = {\n  top: 0,\n  left: 0,\n  center: 0.5,\n  bottom: 1,\n  right: 1\n},\n    _offsetToPx = function _offsetToPx(value, size) {\n  if (_isString(value)) {\n    var eqIndex = value.indexOf(\"=\"),\n        relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\n\n    if (~eqIndex) {\n      value.indexOf(\"%\") > eqIndex && (relative *= size / 100);\n      value = value.substr(0, eqIndex - 1);\n    }\n\n    value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf(\"%\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\n  }\n\n  return value;\n},\n    _createMarker = function _createMarker(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) {\n  var startColor = _ref4.startColor,\n      endColor = _ref4.endColor,\n      fontSize = _ref4.fontSize,\n      indent = _ref4.indent,\n      fontWeight = _ref4.fontWeight;\n\n  var e = _doc.createElement(\"div\"),\n      useFixedPosition = _isViewport(container) || _getProxyProp(container, \"pinType\") === \"fixed\",\n      isScroller = type.indexOf(\"scroller\") !== -1,\n      parent = useFixedPosition ? _body : container,\n      isStart = type.indexOf(\"start\") !== -1,\n      color = isStart ? startColor : endColor,\n      css = \"border-color:\" + color + \";font-size:\" + fontSize + \";color:\" + color + \";font-weight:\" + fontWeight + \";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\";\n\n  css += \"position:\" + ((isScroller || containerAnimation) && useFixedPosition ? \"fixed;\" : \"absolute;\");\n  (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + \":\" + (offset + parseFloat(indent)) + \"px;\");\n  matchWidthEl && (css += \"box-sizing:border-box;text-align:left;width:\" + matchWidthEl.offsetWidth + \"px;\");\n  e._isStart = isStart;\n  e.setAttribute(\"class\", \"gsap-marker-\" + type + (name ? \" marker-\" + name : \"\"));\n  e.style.cssText = css;\n  e.innerText = name || name === 0 ? type + \"-\" + name : type;\n  parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);\n  e._offset = e[\"offset\" + direction.op.d2];\n\n  _positionMarker(e, 0, direction, isStart);\n\n  return e;\n},\n    _positionMarker = function _positionMarker(marker, start, direction, flipped) {\n  var vars = {\n    display: \"block\"\n  },\n      side = direction[flipped ? \"os2\" : \"p2\"],\n      oppositeSide = direction[flipped ? \"p2\" : \"os2\"];\n  marker._isFlipped = flipped;\n  vars[direction.a + \"Percent\"] = flipped ? -100 : 0;\n  vars[direction.a] = flipped ? \"1px\" : 0;\n  vars[\"border\" + side + _Width] = 1;\n  vars[\"border\" + oppositeSide + _Width] = 0;\n  vars[direction.p] = start + \"px\";\n  gsap.set(marker, vars);\n},\n    _triggers = [],\n    _ids = {},\n    _rafID,\n    _sync = function _sync() {\n  return _getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll)));\n},\n    _onScroll = function _onScroll() {\n  // previously, we tried to optimize performance by batching/deferring to the next requestAnimationFrame(), but discovered that Safari has a few bugs that make this unworkable (especially on iOS). See https://codepen.io/GreenSock/pen/16c435b12ef09c38125204818e7b45fc?editors=0010 and https://codepen.io/GreenSock/pen/JjOxYpQ/3dd65ccec5a60f1d862c355d84d14562?editors=0010 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503?editors=0010\n  if (!_normalizer || !_normalizer.isPressed || _normalizer.startX > _body.clientWidth) {\n    // if the user is dragging the scrollbar, allow it.\n    _scrollers.cache++;\n\n    if (_normalizer) {\n      _rafID || (_rafID = requestAnimationFrame(_updateAll));\n    } else {\n      _updateAll(); // Safari in particular (on desktop) NEEDS the immediate update rather than waiting for a requestAnimationFrame() whereas iOS seems to benefit from waiting for the requestAnimationFrame() tick, at least when normalizing. See https://codepen.io/GreenSock/pen/qBYozqO?editors=0110\n\n    }\n\n    _lastScrollTime || _dispatch(\"scrollStart\");\n    _lastScrollTime = _getTime();\n  }\n},\n    _setBaseDimensions = function _setBaseDimensions() {\n  _baseScreenWidth = _win.innerWidth;\n  _baseScreenHeight = _win.innerHeight;\n},\n    _onResize = function _onResize() {\n  _scrollers.cache++;\n  !_refreshing && !_ignoreResize && !_doc.fullscreenElement && !_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win.innerWidth || Math.abs(_win.innerHeight - _baseScreenHeight) > _win.innerHeight * 0.25) && _resizeDelay.restart(true);\n},\n    // ignore resizes triggered by refresh()\n_listeners = {},\n    _emptyArray = [],\n    _softRefresh = function _softRefresh() {\n  return _removeListener(ScrollTrigger, \"scrollEnd\", _softRefresh) || _refreshAll(true);\n},\n    _dispatch = function _dispatch(type) {\n  return _listeners[type] && _listeners[type].map(function (f) {\n    return f();\n  }) || _emptyArray;\n},\n    _savedStyles = [],\n    // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\n_revertRecorded = function _revertRecorded(media) {\n  for (var i = 0; i < _savedStyles.length; i += 5) {\n    if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) {\n      _savedStyles[i].style.cssText = _savedStyles[i + 1];\n      _savedStyles[i].getBBox && _savedStyles[i].setAttribute(\"transform\", _savedStyles[i + 2] || \"\");\n      _savedStyles[i + 3].uncache = 1;\n    }\n  }\n},\n    _revertAll = function _revertAll(kill, media) {\n  var trigger;\n\n  for (_i = 0; _i < _triggers.length; _i++) {\n    trigger = _triggers[_i];\n\n    if (trigger && (!media || trigger._ctx === media)) {\n      if (kill) {\n        trigger.kill(1);\n      } else {\n        trigger.revert(true, true);\n      }\n    }\n  }\n\n  _isReverted = true;\n  media && _revertRecorded(media);\n  media || _dispatch(\"revert\");\n},\n    _clearScrollMemory = function _clearScrollMemory(scrollRestoration, force) {\n  // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state.\n  _scrollers.cache++;\n  (force || !_refreshingAll) && _scrollers.forEach(function (obj) {\n    return _isFunction(obj) && obj.cacheID++ && (obj.rec = 0);\n  });\n  _isString(scrollRestoration) && (_win.history.scrollRestoration = _scrollRestoration = scrollRestoration);\n},\n    _refreshingAll,\n    _refreshID = 0,\n    _queueRefreshID,\n    _queueRefreshAll = function _queueRefreshAll() {\n  // we don't want to call _refreshAll() every time we create a new ScrollTrigger (for performance reasons) - it's better to batch them. Some frameworks dynamically load content and we can't rely on the window's \"load\" or \"DOMContentLoaded\" events to trigger it.\n  if (_queueRefreshID !== _refreshID) {\n    var id = _queueRefreshID = _refreshID;\n    requestAnimationFrame(function () {\n      return id === _refreshID && _refreshAll(true);\n    });\n  }\n},\n    _refresh100vh = function _refresh100vh() {\n  _body.appendChild(_div100vh);\n\n  _100vh = !_normalizer && _div100vh.offsetHeight || _win.innerHeight;\n\n  _body.removeChild(_div100vh);\n},\n    _hideAllMarkers = function _hideAllMarkers(hide) {\n  return _toArray(\".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end\").forEach(function (el) {\n    return el.style.display = hide ? \"none\" : \"block\";\n  });\n},\n    _refreshAll = function _refreshAll(force, skipRevert) {\n  if (_lastScrollTime && !force && !_isReverted) {\n    _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n    return;\n  }\n\n  _refresh100vh();\n\n  _refreshingAll = ScrollTrigger.isRefreshing = true;\n\n  _scrollers.forEach(function (obj) {\n    return _isFunction(obj) && ++obj.cacheID && (obj.rec = obj());\n  }); // force the clearing of the cache because some browsers take a little while to dispatch the \"scroll\" event and the user may have changed the scroll position and then called ScrollTrigger.refresh() right away\n\n\n  var refreshInits = _dispatch(\"refreshInit\");\n\n  _sort && ScrollTrigger.sort();\n  skipRevert || _revertAll();\n\n  _scrollers.forEach(function (obj) {\n    if (_isFunction(obj)) {\n      obj.smooth && (obj.target.style.scrollBehavior = \"auto\"); // smooth scrolling interferes\n\n      obj(0);\n    }\n  });\n\n  _triggers.slice(0).forEach(function (t) {\n    return t.refresh();\n  }); // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip.\n\n\n  _isReverted = false;\n\n  _triggers.forEach(function (t) {\n    // nested pins (pinnedContainer) with pinSpacing may expand the container, so we must accommodate that here.\n    if (t._subPinOffset && t.pin) {\n      var prop = t.vars.horizontal ? \"offsetWidth\" : \"offsetHeight\",\n          original = t.pin[prop];\n      t.revert(true, 1);\n      t.adjustPinSpacing(t.pin[prop] - original);\n      t.refresh();\n    }\n  });\n\n  _clampingMax = 1; // pinSpacing might be propping a page open, thus when we .setPositions() to clamp a ScrollTrigger's end we should leave the pinSpacing alone. That's what this flag is for.\n\n  _hideAllMarkers(true);\n\n  _triggers.forEach(function (t) {\n    // the scroller's max scroll position may change after all the ScrollTriggers refreshed (like pinning could push it down), so we need to loop back and correct any with end: \"max\". Same for anything with a clamped end\n    var max = _maxScroll(t.scroller, t._dir),\n        endClamp = t.vars.end === \"max\" || t._endClamp && t.end > max,\n        startClamp = t._startClamp && t.start >= max;\n\n    (endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);\n  });\n\n  _hideAllMarkers(false);\n\n  _clampingMax = 0;\n  refreshInits.forEach(function (result) {\n    return result && result.render && result.render(-1);\n  }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\n\n  _scrollers.forEach(function (obj) {\n    if (_isFunction(obj)) {\n      obj.smooth && requestAnimationFrame(function () {\n        return obj.target.style.scrollBehavior = \"smooth\";\n      });\n      obj.rec && obj(obj.rec);\n    }\n  });\n\n  _clearScrollMemory(_scrollRestoration, 1);\n\n  _resizeDelay.pause();\n\n  _refreshID++;\n  _refreshingAll = 2;\n\n  _updateAll(2);\n\n  _triggers.forEach(function (t) {\n    return _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t);\n  });\n\n  _refreshingAll = ScrollTrigger.isRefreshing = false;\n\n  _dispatch(\"refresh\");\n},\n    _lastScroll = 0,\n    _direction = 1,\n    _primary,\n    _updateAll = function _updateAll(force) {\n  if (force === 2 || !_refreshingAll && !_isReverted) {\n    // _isReverted could be true if, for example, a matchMedia() is in the process of executing. We don't want to update during the time everything is reverted.\n    ScrollTrigger.isUpdating = true;\n    _primary && _primary.update(0); // ScrollSmoother uses refreshPriority -9999 to become the primary that gets updated before all others because it affects the scroll position.\n\n    var l = _triggers.length,\n        time = _getTime(),\n        recordVelocity = time - _time1 >= 50,\n        scroll = l && _triggers[0].scroll();\n\n    _direction = _lastScroll > scroll ? -1 : 1;\n    _refreshingAll || (_lastScroll = scroll);\n\n    if (recordVelocity) {\n      if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\n        _lastScrollTime = 0;\n\n        _dispatch(\"scrollEnd\");\n      }\n\n      _time2 = _time1;\n      _time1 = time;\n    }\n\n    if (_direction < 0) {\n      _i = l;\n\n      while (_i-- > 0) {\n        _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n      }\n\n      _direction = 1;\n    } else {\n      for (_i = 0; _i < l; _i++) {\n        _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n      }\n    }\n\n    ScrollTrigger.isUpdating = false;\n  }\n\n  _rafID = 0;\n},\n    _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \"display\", \"flexShrink\", \"float\", \"zIndex\", \"gridColumnStart\", \"gridColumnEnd\", \"gridRowStart\", \"gridRowEnd\", \"gridArea\", \"justifySelf\", \"alignSelf\", \"placeSelf\", \"order\"],\n    _stateProps = _propNamesToCopy.concat([_width, _height, \"boxSizing\", \"max\" + _Width, \"max\" + _Height, \"position\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\n    _swapPinOut = function _swapPinOut(pin, spacer, state) {\n  _setState(state);\n\n  var cache = pin._gsap;\n\n  if (cache.spacerIsNative) {\n    _setState(cache.spacerState);\n  } else if (pin._gsap.swappedIn) {\n    var parent = spacer.parentNode;\n\n    if (parent) {\n      parent.insertBefore(pin, spacer);\n      parent.removeChild(spacer);\n    }\n  }\n\n  pin._gsap.swappedIn = false;\n},\n    _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {\n  if (!pin._gsap.swappedIn) {\n    var i = _propNamesToCopy.length,\n        spacerStyle = spacer.style,\n        pinStyle = pin.style,\n        p;\n\n    while (i--) {\n      p = _propNamesToCopy[i];\n      spacerStyle[p] = cs[p];\n    }\n\n    spacerStyle.position = cs.position === \"absolute\" ? \"absolute\" : \"relative\";\n    cs.display === \"inline\" && (spacerStyle.display = \"inline-block\");\n    pinStyle[_bottom] = pinStyle[_right] = \"auto\";\n    spacerStyle.flexBasis = cs.flexBasis || \"auto\";\n    spacerStyle.overflow = \"visible\";\n    spacerStyle.boxSizing = \"border-box\";\n    spacerStyle[_width] = _getSize(pin, _horizontal) + _px;\n    spacerStyle[_height] = _getSize(pin, _vertical) + _px;\n    spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \"0\";\n\n    _setState(spacerState);\n\n    pinStyle[_width] = pinStyle[\"max\" + _Width] = cs[_width];\n    pinStyle[_height] = pinStyle[\"max\" + _Height] = cs[_height];\n    pinStyle[_padding] = cs[_padding];\n\n    if (pin.parentNode !== spacer) {\n      pin.parentNode.insertBefore(spacer, pin);\n      spacer.appendChild(pin);\n    }\n\n    pin._gsap.swappedIn = true;\n  }\n},\n    _capsExp = /([A-Z])/g,\n    _setState = function _setState(state) {\n  if (state) {\n    var style = state.t.style,\n        l = state.length,\n        i = 0,\n        p,\n        value;\n    (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off\n\n    for (; i < l; i += 2) {\n      value = state[i + 1];\n      p = state[i];\n\n      if (value) {\n        style[p] = value;\n      } else if (style[p]) {\n        style.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n      }\n    }\n  }\n},\n    _getState = function _getState(element) {\n  // returns an Array with alternating values like [property, value, property, value] and a \"t\" property pointing to the target (element). Makes it fast and cheap.\n  var l = _stateProps.length,\n      style = element.style,\n      state = [],\n      i = 0;\n\n  for (; i < l; i++) {\n    state.push(_stateProps[i], style[_stateProps[i]]);\n  }\n\n  state.t = element;\n  return state;\n},\n    _copyState = function _copyState(state, override, omitOffsets) {\n  var result = [],\n      l = state.length,\n      i = omitOffsets ? 8 : 0,\n      // skip top, left, right, bottom if omitOffsets is true\n  p;\n\n  for (; i < l; i += 2) {\n    p = state[i];\n    result.push(p, p in override ? override[p] : state[i + 1]);\n  }\n\n  result.t = state.t;\n  return result;\n},\n    _winOffsets = {\n  left: 0,\n  top: 0\n},\n    // // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition(\"#id\", \"top bottom\")\n// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => {\n// \tscroller = _getTarget(scroller || _win);\n// \tlet direction = horizontal ? _horizontal : _vertical,\n// \t\tisViewport = _isViewport(scroller);\n// \t_getSizeFunc(scroller, isViewport, direction);\n// \treturn _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation);\n// },\n_parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) {\n  _isFunction(value) && (value = value(self));\n\n  if (_isString(value) && value.substr(0, 3) === \"max\") {\n    value = scrollerMax + (value.charAt(4) === \"=\" ? _offsetToPx(\"0\" + value.substr(3), scrollerSize) : 0);\n  }\n\n  var time = containerAnimation ? containerAnimation.time() : 0,\n      p1,\n      p2,\n      element;\n  containerAnimation && containerAnimation.seek(0);\n  isNaN(value) || (value = +value); // convert a string number like \"45\" to an actual number\n\n  if (!_isNumber(value)) {\n    _isFunction(trigger) && (trigger = trigger(self));\n    var offsets = (value || \"0\").split(\" \"),\n        bounds,\n        localOffset,\n        globalOffset,\n        display;\n    element = _getTarget(trigger, self) || _body;\n    bounds = _getBounds(element) || {};\n\n    if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === \"none\") {\n      // if display is \"none\", it won't report getBoundingClientRect() properly\n      display = element.style.display;\n      element.style.display = \"block\";\n      bounds = _getBounds(element);\n      display ? element.style.display = display : element.style.removeProperty(\"display\");\n    }\n\n    localOffset = _offsetToPx(offsets[0], bounds[direction.d]);\n    globalOffset = _offsetToPx(offsets[1] || \"0\", scrollerSize);\n    value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\n    markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);\n    scrollerSize -= scrollerSize - globalOffset; // adjust for the marker\n  } else {\n    containerAnimation && (value = gsap.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));\n    markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);\n  }\n\n  if (clampZeroProp) {\n    self[clampZeroProp] = value || -0.001;\n    value < 0 && (value = 0);\n  }\n\n  if (marker) {\n    var position = value + scrollerSize,\n        isStart = marker._isStart;\n    p1 = \"scroll\" + direction.d2;\n\n    _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1);\n\n    if (useFixedPosition) {\n      scrollerBounds = _getBounds(markerScroller);\n      useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);\n    }\n  }\n\n  if (containerAnimation && element) {\n    p1 = _getBounds(element);\n    containerAnimation.seek(scrollerMax);\n    p2 = _getBounds(element);\n    containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];\n    value = value / containerAnimation._caScrollDist * scrollerMax;\n  }\n\n  containerAnimation && containerAnimation.seek(time);\n  return containerAnimation ? value : Math.round(value);\n},\n    _prefixExp = /(webkit|moz|length|cssText|inset)/i,\n    _reparent = function _reparent(element, parent, top, left) {\n  if (element.parentNode !== parent) {\n    var style = element.style,\n        p,\n        cs;\n\n    if (parent === _body) {\n      element._stOrig = style.cssText; // record original inline styles so we can revert them later\n\n      cs = _getComputedStyle(element);\n\n      for (p in cs) {\n        // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.\n        if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \"string\" && p !== \"0\") {\n          style[p] = cs[p];\n        }\n      }\n\n      style.top = top;\n      style.left = left;\n    } else {\n      style.cssText = element._stOrig;\n    }\n\n    gsap.core.getCache(element).uncache = 1;\n    parent.appendChild(element);\n  }\n},\n    _interruptionTracker = function _interruptionTracker(getValueFunc, initialValue, onInterrupt) {\n  var last1 = initialValue,\n      last2 = last1;\n  return function (value) {\n    var current = Math.round(getValueFunc()); // round because in some [very uncommon] Windows environments, scroll can get reported with decimals even though it was set without.\n\n    if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) {\n      // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.\n      value = current;\n      onInterrupt && onInterrupt();\n    }\n\n    last2 = last1;\n    last1 = value;\n    return value;\n  };\n},\n    _shiftMarker = function _shiftMarker(marker, direction, value) {\n  var vars = {};\n  vars[direction.p] = \"+=\" + value;\n  gsap.set(marker, vars);\n},\n    // _mergeAnimations = animations => {\n// \tlet tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0))));\n// \tanimations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); });\n// \ttl.smoothChildTiming = false;\n// \treturn tl;\n// },\n// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\n_getTweenCreator = function _getTweenCreator(scroller, direction) {\n  var getScroll = _getScrollFunc(scroller, direction),\n      prop = \"_scroll\" + direction.p2,\n      // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\n  getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {\n    var tween = getTween.tween,\n        onComplete = vars.onComplete,\n        modifiers = {};\n    initialValue = initialValue || getScroll();\n\n    var checkForInterruption = _interruptionTracker(getScroll, initialValue, function () {\n      tween.kill();\n      getTween.tween = 0;\n    });\n\n    change2 = change1 && change2 || 0; // if change1 is 0, we set that to the difference and ignore change2. Otherwise, there would be a compound effect.\n\n    change1 = change1 || scrollTo - initialValue;\n    tween && tween.kill();\n    vars[prop] = scrollTo;\n    vars.inherit = false;\n    vars.modifiers = modifiers;\n\n    modifiers[prop] = function () {\n      return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);\n    };\n\n    vars.onUpdate = function () {\n      _scrollers.cache++;\n      getTween.tween && _updateAll(); // if it was interrupted/killed, like in a context.revert(), don't force an updateAll()\n    };\n\n    vars.onComplete = function () {\n      getTween.tween = 0;\n      onComplete && onComplete.call(tween);\n    };\n\n    tween = getTween.tween = gsap.to(scroller, vars);\n    return tween;\n  };\n\n  scroller[prop] = getScroll;\n\n  getScroll.wheelHandler = function () {\n    return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);\n  };\n\n  _addListener(scroller, \"wheel\", getScroll.wheelHandler); // Windows machines handle mousewheel scrolling in chunks (like \"3 lines per scroll\") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event.\n\n\n  ScrollTrigger.isTouch && _addListener(scroller, \"touchmove\", getScroll.wheelHandler);\n  return getTween;\n};\n\nexport var ScrollTrigger = /*#__PURE__*/function () {\n  function ScrollTrigger(vars, animation) {\n    _coreInitted || ScrollTrigger.register(gsap) || console.warn(\"Please gsap.registerPlugin(ScrollTrigger)\");\n\n    _context(this);\n\n    this.init(vars, animation);\n  }\n\n  var _proto = ScrollTrigger.prototype;\n\n  _proto.init = function init(vars, animation) {\n    this.progress = this.start = 0;\n    this.vars && this.kill(true, true); // in case it's being initted again\n\n    if (!_enabled) {\n      this.update = this.refresh = this.kill = _passThrough;\n      return;\n    }\n\n    vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {\n      trigger: vars\n    } : vars, _defaults);\n\n    var _vars = vars,\n        onUpdate = _vars.onUpdate,\n        toggleClass = _vars.toggleClass,\n        id = _vars.id,\n        onToggle = _vars.onToggle,\n        onRefresh = _vars.onRefresh,\n        scrub = _vars.scrub,\n        trigger = _vars.trigger,\n        pin = _vars.pin,\n        pinSpacing = _vars.pinSpacing,\n        invalidateOnRefresh = _vars.invalidateOnRefresh,\n        anticipatePin = _vars.anticipatePin,\n        onScrubComplete = _vars.onScrubComplete,\n        onSnapComplete = _vars.onSnapComplete,\n        once = _vars.once,\n        snap = _vars.snap,\n        pinReparent = _vars.pinReparent,\n        pinSpacer = _vars.pinSpacer,\n        containerAnimation = _vars.containerAnimation,\n        fastScrollEnd = _vars.fastScrollEnd,\n        preventOverlaps = _vars.preventOverlaps,\n        direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _horizontal : _vertical,\n        isToggle = !scrub && scrub !== 0,\n        scroller = _getTarget(vars.scroller || _win),\n        scrollerCache = gsap.core.getCache(scroller),\n        isViewport = _isViewport(scroller),\n        useFixedPosition = (\"pinType\" in vars ? vars.pinType : _getProxyProp(scroller, \"pinType\") || isViewport && \"fixed\") === \"fixed\",\n        callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\n        toggleActions = isToggle && vars.toggleActions.split(\" \"),\n        markers = \"markers\" in vars ? vars.markers : _defaults.markers,\n        borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0,\n        self = this,\n        onRefreshInit = vars.onRefreshInit && function () {\n      return vars.onRefreshInit(self);\n    },\n        getScrollerSize = _getSizeFunc(scroller, isViewport, direction),\n        getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\n        lastSnap = 0,\n        lastRefresh = 0,\n        prevProgress = 0,\n        scrollFunc = _getScrollFunc(scroller, direction),\n        tweenTo,\n        pinCache,\n        snapFunc,\n        scroll1,\n        scroll2,\n        start,\n        end,\n        markerStart,\n        markerEnd,\n        markerStartTrigger,\n        markerEndTrigger,\n        markerVars,\n        executingOnRefresh,\n        change,\n        pinOriginalState,\n        pinActiveState,\n        pinState,\n        spacer,\n        offset,\n        pinGetter,\n        pinSetter,\n        pinStart,\n        pinChange,\n        spacingStart,\n        spacerState,\n        markerStartSetter,\n        pinMoves,\n        markerEndSetter,\n        cs,\n        snap1,\n        snap2,\n        scrubTween,\n        scrubSmooth,\n        snapDurClamp,\n        snapDelayedCall,\n        prevScroll,\n        prevAnimProgress,\n        caMarkerSetter,\n        customRevertReturn; // for the sake of efficiency, _startClamp/_endClamp serve like a truthy value indicating that clamping was enabled on the start/end, and ALSO store the actual pre-clamped numeric value. We tap into that in ScrollSmoother for speed effects. So for example, if start=\"clamp(top bottom)\" results in a start of -100 naturally, it would get clamped to 0 but -100 would be stored in _startClamp.\n\n\n    self._startClamp = self._endClamp = false;\n    self._dir = direction;\n    anticipatePin *= 45;\n    self.scroller = scroller;\n    self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;\n    scroll1 = scrollFunc();\n    self.vars = vars;\n    animation = animation || vars.animation;\n\n    if (\"refreshPriority\" in vars) {\n      _sort = 1;\n      vars.refreshPriority === -9999 && (_primary = self); // used by ScrollSmoother\n    }\n\n    scrollerCache.tweenScroll = scrollerCache.tweenScroll || {\n      top: _getTweenCreator(scroller, _vertical),\n      left: _getTweenCreator(scroller, _horizontal)\n    };\n    self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\n\n    self.scrubDuration = function (value) {\n      scrubSmooth = _isNumber(value) && value;\n\n      if (!scrubSmooth) {\n        scrubTween && scrubTween.progress(1).kill();\n        scrubTween = 0;\n      } else {\n        scrubTween ? scrubTween.duration(value) : scrubTween = gsap.to(animation, {\n          ease: \"expo\",\n          totalProgress: \"+=0\",\n          inherit: false,\n          duration: scrubSmooth,\n          paused: true,\n          onComplete: function onComplete() {\n            return onScrubComplete && onScrubComplete(self);\n          }\n        });\n      }\n    };\n\n    if (animation) {\n      animation.vars.lazy = false;\n      animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true); // special case: if this ScrollTrigger gets re-initted, a from() tween with a stagger could get initted initially and then reverted on the re-init which means it'll need to get rendered again here to properly display things. Otherwise, See https://gsap.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010\n\n      self.animation = animation.pause();\n      animation.scrollTrigger = self;\n      self.scrubDuration(scrub);\n      snap1 = 0;\n      id || (id = animation.vars.id);\n    }\n\n    if (snap) {\n      // TODO: potential idea: use legitimate CSS scroll snapping by pushing invisible elements into the DOM that serve as snap positions, and toggle the document.scrollingElement.style.scrollSnapType onToggle. See https://codepen.io/GreenSock/pen/JjLrgWM for a quick proof of concept.\n      if (!_isObject(snap) || snap.push) {\n        snap = {\n          snapTo: snap\n        };\n      }\n\n      \"scrollBehavior\" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, {\n        scrollBehavior: \"auto\"\n      }); // smooth scrolling doesn't work with snap.\n\n      _scrollers.forEach(function (o) {\n        return _isFunction(o) && o.target === (isViewport ? _doc.scrollingElement || _docEl : scroller) && (o.smooth = false);\n      }); // note: set smooth to false on both the vertical and horizontal scroll getters/setters\n\n\n      snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \"labels\" ? _getClosestLabel(animation) : snap.snapTo === \"labelsDirectional\" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) {\n        return _snapDirectional(snap.snapTo)(value, _getTime() - lastRefresh < 500 ? 0 : st.direction);\n      } : gsap.utils.snap(snap.snapTo);\n      snapDurClamp = snap.duration || {\n        min: 0.1,\n        max: 2\n      };\n      snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\n      snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {\n        var scroll = scrollFunc(),\n            refreshedRecently = _getTime() - lastRefresh < 500,\n            tween = tweenTo.tween;\n\n        if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {\n          var progress = (scroll - start) / change,\n              totalProgress = animation && !isToggle ? animation.totalProgress() : progress,\n              velocity = refreshedRecently ? 0 : (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0,\n              change1 = gsap.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185),\n              naturalEnd = progress + (snap.inertia === false ? 0 : change1),\n              endValue,\n              endScroll,\n              _snap = snap,\n              onStart = _snap.onStart,\n              _onInterrupt = _snap.onInterrupt,\n              _onComplete = _snap.onComplete;\n          endValue = snapFunc(naturalEnd, self);\n          _isNumber(endValue) || (endValue = naturalEnd); // in case the function didn't return a number, fall back to using the naturalEnd\n\n          endScroll = Math.round(start + endValue * change);\n\n          if (scroll <= end && scroll >= start && endScroll !== scroll) {\n            if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) {\n              // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\n              return;\n            }\n\n            if (snap.inertia === false) {\n              change1 = endValue - progress;\n            }\n\n            tweenTo(endScroll, {\n              duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),\n              ease: snap.ease || \"power3\",\n              data: _abs(endScroll - scroll),\n              // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\n              onInterrupt: function onInterrupt() {\n                return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);\n              },\n              onComplete: function onComplete() {\n                self.update();\n                lastSnap = scrollFunc();\n\n                if (animation) {\n                  // the resolution of the scrollbar is limited, so we should correct the scrubbed animation's playhead at the end to match EXACTLY where it was supposed to snap\n                  scrubTween ? scrubTween.resetTo(\"totalProgress\", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);\n                }\n\n                snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\n                onSnapComplete && onSnapComplete(self);\n                _onComplete && _onComplete(self);\n              }\n            }, scroll, change1 * change, endScroll - scroll - change1 * change);\n            onStart && onStart(self, tweenTo.tween);\n          }\n        } else if (self.isActive && lastSnap !== scroll) {\n          snapDelayedCall.restart(true);\n        }\n      }).pause();\n    }\n\n    id && (_ids[id] = self);\n    trigger = self.trigger = _getTarget(trigger || pin !== true && pin); // if a trigger has some kind of scroll-related effect applied that could contaminate the \"y\" or \"x\" position (like a ScrollSmoother effect), we needed a way to temporarily revert it, so we use the stRevert property of the gsCache. It can return another function that we'll call at the end so it can return to its normal state.\n\n    customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;\n    customRevertReturn && (customRevertReturn = customRevertReturn(self));\n    pin = pin === true ? trigger : _getTarget(pin);\n    _isString(toggleClass) && (toggleClass = {\n      targets: trigger,\n      className: toggleClass\n    });\n\n    if (pin) {\n      pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === \"flex\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default. We should check that pin.parentNode is an element (not shadow dom window)\n\n      self.pin = pin;\n      pinCache = gsap.core.getCache(pin);\n\n      if (!pinCache.spacer) {\n        // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \"original\" pin state after it has already been affected by another ScrollTrigger.\n        if (pinSpacer) {\n          pinSpacer = _getTarget(pinSpacer);\n          pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular\n\n          pinCache.spacerIsNative = !!pinSpacer;\n          pinSpacer && (pinCache.spacerState = _getState(pinSpacer));\n        }\n\n        pinCache.spacer = spacer = pinSpacer || _doc.createElement(\"div\");\n        spacer.classList.add(\"pin-spacer\");\n        id && spacer.classList.add(\"pin-spacer-\" + id);\n        pinCache.pinState = pinOriginalState = _getState(pin);\n      } else {\n        pinOriginalState = pinCache.pinState;\n      }\n\n      vars.force3D !== false && gsap.set(pin, {\n        force3D: true\n      });\n      self.spacer = spacer = pinCache.spacer;\n      cs = _getComputedStyle(pin);\n      spacingStart = cs[pinSpacing + direction.os2];\n      pinGetter = gsap.getProperty(pin);\n      pinSetter = gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \"hidden\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\n\n      _swapPinIn(pin, spacer, cs);\n\n      pinState = _getState(pin);\n    }\n\n    if (markers) {\n      markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\n      markerStartTrigger = _createMarker(\"scroller-start\", id, scroller, direction, markerVars, 0);\n      markerEndTrigger = _createMarker(\"scroller-end\", id, scroller, direction, markerVars, 0, markerStartTrigger);\n      offset = markerStartTrigger[\"offset\" + direction.op.d2];\n\n      var content = _getTarget(_getProxyProp(scroller, \"content\") || scroller);\n\n      markerStart = this.markerStart = _createMarker(\"start\", id, content, direction, markerVars, offset, 0, containerAnimation);\n      markerEnd = this.markerEnd = _createMarker(\"end\", id, content, direction, markerVars, offset, 0, containerAnimation);\n      containerAnimation && (caMarkerSetter = gsap.quickSetter([markerStart, markerEnd], direction.a, _px));\n\n      if (!useFixedPosition && !(_proxies.length && _getProxyProp(scroller, \"fixedMarkers\") === true)) {\n        _makePositionable(isViewport ? _body : scroller);\n\n        gsap.set([markerStartTrigger, markerEndTrigger], {\n          force3D: true\n        });\n        markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\n        markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\n      }\n    }\n\n    if (containerAnimation) {\n      var oldOnUpdate = containerAnimation.vars.onUpdate,\n          oldParams = containerAnimation.vars.onUpdateParams;\n      containerAnimation.eventCallback(\"onUpdate\", function () {\n        self.update(0, 0, 1);\n        oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);\n      });\n    }\n\n    self.previous = function () {\n      return _triggers[_triggers.indexOf(self) - 1];\n    };\n\n    self.next = function () {\n      return _triggers[_triggers.indexOf(self) + 1];\n    };\n\n    self.revert = function (revert, temp) {\n      if (!temp) {\n        return self.kill(true);\n      } // for compatibility with gsap.context() and gsap.matchMedia() which call revert()\n\n\n      var r = revert !== false || !self.enabled,\n          prevRefreshing = _refreshing;\n\n      if (r !== self.isReverted) {\n        if (r) {\n          prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\n\n          prevProgress = self.progress;\n          prevAnimProgress = animation && animation.progress();\n        }\n\n        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n          return m.style.display = r ? \"none\" : \"block\";\n        });\n\n        if (r) {\n          _refreshing = self;\n          self.update(r); // make sure the pin is back in its original position so that all the measurements are correct. do this BEFORE swapping the pin out\n        }\n\n        if (pin && (!pinReparent || !self.isActive)) {\n          if (r) {\n            _swapPinOut(pin, spacer, pinOriginalState);\n          } else {\n            _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState);\n          }\n        }\n\n        r || self.update(r); // when we're restoring, the update should run AFTER swapping the pin into its pin-spacer.\n\n        _refreshing = prevRefreshing; // restore. We set it to true during the update() so that things fire properly in there.\n\n        self.isReverted = r;\n      }\n    };\n\n    self.refresh = function (soft, force, position, pinOffset) {\n      // position is typically only defined if it's coming from setPositions() - it's a way to skip the normal parsing. pinOffset is also only from setPositions() and is mostly related to fancy stuff we need to do in ScrollSmoother with effects\n      if ((_refreshing || !self.enabled) && !force) {\n        return;\n      }\n\n      if (pin && soft && _lastScrollTime) {\n        _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n        return;\n      }\n\n      !_refreshingAll && onRefreshInit && onRefreshInit(self);\n      _refreshing = self;\n\n      if (tweenTo.tween && !position) {\n        // we skip this if a position is passed in because typically that's from .setPositions() and it's best to allow in-progress snapping to continue.\n        tweenTo.tween.kill();\n        tweenTo.tween = 0;\n      }\n\n      scrubTween && scrubTween.pause();\n      invalidateOnRefresh && animation && animation.revert({\n        kill: false\n      }).invalidate();\n      self.isReverted || self.revert(true, true);\n      self._subPinOffset = false; // we'll set this to true in the sub-pins if we find any\n\n      var size = getScrollerSize(),\n          scrollerBounds = getScrollerOffsets(),\n          max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),\n          isFirstRefresh = change <= 0.01,\n          offset = 0,\n          otherPinOffset = pinOffset || 0,\n          parsedEnd = _isObject(position) ? position.end : vars.end,\n          parsedEndTrigger = vars.endTrigger || trigger,\n          parsedStart = _isObject(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? \"0 0\" : \"0 100%\"),\n          pinnedContainer = self.pinnedContainer = vars.pinnedContainer && _getTarget(vars.pinnedContainer, self),\n          triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,\n          i = triggerIndex,\n          cs,\n          bounds,\n          scroll,\n          isVertical,\n          override,\n          curTrigger,\n          curPin,\n          oppositeScroll,\n          initted,\n          revertedPins,\n          forcedOverflow,\n          markerStartOffset,\n          markerEndOffset;\n\n      if (markers && _isObject(position)) {\n        // if we alter the start/end positions with .setPositions(), it generally feeds in absolute NUMBERS which don't convey information about where to line up the markers, so to keep it intuitive, we record how far the trigger positions shift after applying the new numbers and then offset by that much in the opposite direction. We do the same to the associated trigger markers too of course.\n        markerStartOffset = gsap.getProperty(markerStartTrigger, direction.p);\n        markerEndOffset = gsap.getProperty(markerEndTrigger, direction.p);\n      }\n\n      while (i--) {\n        // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \"rewind\" properly.\n        curTrigger = _triggers[i];\n        curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly.\n\n        curPin = curTrigger.pin;\n\n        if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {\n          revertedPins || (revertedPins = []);\n          revertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly\n\n          curTrigger.revert(true, true);\n        }\n\n        if (curTrigger !== _triggers[i]) {\n          // in case it got removed.\n          triggerIndex--;\n          i--;\n        }\n      }\n\n      _isFunction(parsedStart) && (parsedStart = parsedStart(self));\n      parsedStart = _parseClamp(parsedStart, \"start\", self);\n      start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && \"_startClamp\") || (pin ? -0.001 : 0);\n      _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\n\n      if (_isString(parsedEnd) && !parsedEnd.indexOf(\"+=\")) {\n        if (~parsedEnd.indexOf(\" \")) {\n          parsedEnd = (_isString(parsedStart) ? parsedStart.split(\" \")[0] : \"\") + parsedEnd;\n        } else {\n          offset = _offsetToPx(parsedEnd.substr(2), size);\n          parsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? gsap.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\n\n          parsedEndTrigger = trigger;\n        }\n      }\n\n      parsedEnd = _parseClamp(parsedEnd, \"end\", self);\n      end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \"100% 0\" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && \"_endClamp\")) || -0.001;\n      offset = 0;\n      i = triggerIndex;\n\n      while (i--) {\n        curTrigger = _triggers[i];\n        curPin = curTrigger.pin;\n\n        if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {\n          cs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);\n\n          if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) {\n            // numeric start values shouldn't be offset at all - treat them as absolute\n            offset += cs * (1 - curTrigger.progress);\n          }\n\n          curPin === pin && (otherPinOffset += cs);\n        }\n      }\n\n      start += offset;\n      end += offset;\n      self._startClamp && (self._startClamp += offset);\n\n      if (self._endClamp && !_refreshingAll) {\n        self._endClamp = end || -0.001;\n        end = Math.min(end, _maxScroll(scroller, direction));\n      }\n\n      change = end - start || (start -= 0.01) && 0.001;\n\n      if (isFirstRefresh) {\n        // on the very first refresh(), the prevProgress couldn't have been accurate yet because the start/end were never calculated, so we set it here. Before 3.11.5, it could lead to an inaccurate scroll position restoration with snapping.\n        prevProgress = gsap.utils.clamp(0, 1, gsap.utils.normalize(start, end, prevScroll));\n      }\n\n      self._pinPush = otherPinOffset;\n\n      if (markerStart && offset) {\n        // offset the markers if necessary\n        cs = {};\n        cs[direction.a] = \"+=\" + offset;\n        pinnedContainer && (cs[direction.p] = \"-=\" + scrollFunc());\n        gsap.set([markerStart, markerEnd], cs);\n      }\n\n      if (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {\n        cs = _getComputedStyle(pin);\n        isVertical = direction === _vertical;\n        scroll = scrollFunc(); // recalculate because the triggers can affect the scroll\n\n        pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\n\n        if (!max && end > 1) {\n          // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://gsap.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\n          forcedOverflow = (isViewport ? _doc.scrollingElement || _docEl : scroller).style;\n          forcedOverflow = {\n            style: forcedOverflow,\n            value: forcedOverflow[\"overflow\" + direction.a.toUpperCase()]\n          };\n\n          if (isViewport && _getComputedStyle(_body)[\"overflow\" + direction.a.toUpperCase()] !== \"scroll\") {\n            // avoid an extra scrollbar if BOTH <html> and <body> have overflow set to \"scroll\"\n            forcedOverflow.style[\"overflow\" + direction.a.toUpperCase()] = \"scroll\";\n          }\n        }\n\n        _swapPinIn(pin, spacer, cs);\n\n        pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\n\n        bounds = _getBounds(pin, true);\n        oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();\n\n        if (pinSpacing) {\n          spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\n          spacerState.t = spacer;\n          i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;\n\n          if (i) {\n            spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\n\n            spacer.style.flexBasis !== \"auto\" && (spacer.style.flexBasis = i + _px);\n          }\n\n          _setState(spacerState);\n\n          if (pinnedContainer) {\n            // in ScrollTrigger.refresh(), we need to re-evaluate the pinContainer's size because this pinSpacing may stretch it out, but we can't just add the exact distance because depending on layout, it may not push things down or it may only do so partially.\n            _triggers.forEach(function (t) {\n              if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {\n                t._subPinOffset = true;\n              }\n            });\n          }\n\n          useFixedPosition && scrollFunc(prevScroll);\n        } else {\n          i = _getSize(pin, direction);\n          i && spacer.style.flexBasis !== \"auto\" && (spacer.style.flexBasis = i + _px);\n        }\n\n        if (useFixedPosition) {\n          override = {\n            top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,\n            left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,\n            boxSizing: \"border-box\",\n            position: \"fixed\"\n          };\n          override[_width] = override[\"max\" + _Width] = Math.ceil(bounds.width) + _px;\n          override[_height] = override[\"max\" + _Height] = Math.ceil(bounds.height) + _px;\n          override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \"0\";\n          override[_padding] = cs[_padding];\n          override[_padding + _Top] = cs[_padding + _Top];\n          override[_padding + _Right] = cs[_padding + _Right];\n          override[_padding + _Bottom] = cs[_padding + _Bottom];\n          override[_padding + _Left] = cs[_padding + _Left];\n          pinActiveState = _copyState(pinOriginalState, override, pinReparent);\n          _refreshingAll && scrollFunc(0);\n        }\n\n        if (animation) {\n          // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\n          initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.\n\n          _suppressOverwrites(1);\n\n          animation.render(animation.duration(), true, true);\n          pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\n          pinMoves = Math.abs(change - pinChange) > 1;\n          useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\n\n          animation.render(0, true, true);\n          initted || animation.invalidate(true);\n          animation.parent || animation.totalTime(animation.totalTime()); // if, for example, a toggleAction called play() and then refresh() happens and when we render(1) above, it would cause the animation to complete and get removed from its parent, so this makes sure it gets put back in.\n\n          _suppressOverwrites(0);\n        } else {\n          pinChange = change;\n        }\n\n        forcedOverflow && (forcedOverflow.value ? forcedOverflow.style[\"overflow\" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty(\"overflow-\" + direction.a));\n      } else if (trigger && scrollFunc() && !containerAnimation) {\n        // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\n        bounds = trigger.parentNode;\n\n        while (bounds && bounds !== _body) {\n          if (bounds._pinOffset) {\n            start -= bounds._pinOffset;\n            end -= bounds._pinOffset;\n          }\n\n          bounds = bounds.parentNode;\n        }\n      }\n\n      revertedPins && revertedPins.forEach(function (t) {\n        return t.revert(false, true);\n      });\n      self.start = start;\n      self.end = end;\n      scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc(); // reset velocity\n\n      if (!containerAnimation && !_refreshingAll) {\n        scroll1 < prevScroll && scrollFunc(prevScroll);\n        self.scroll.rec = 0;\n      }\n\n      self.revert(false, true);\n      lastRefresh = _getTime();\n\n      if (snapDelayedCall) {\n        lastSnap = -1; // just so snapping gets re-enabled, clear out any recorded last value\n        // self.isActive && scrollFunc(start + change * prevProgress); // previously this line was here to ensure that when snapping kicks in, it's from the previous progress but in some cases that's not desirable, like an all-page ScrollTrigger when new content gets added to the page, that'd totally change the progress.\n\n        snapDelayedCall.restart(true);\n      }\n\n      _refreshing = 0;\n      animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().\n\n      if (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh) {\n        // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\n        animation && !isToggle && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? gsap.utils.normalize(start, end, 0) : prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\n\n        self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress;\n      }\n\n      pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\n      scrubTween && scrubTween.invalidate();\n\n      if (!isNaN(markerStartOffset)) {\n        // numbers were passed in for the position which are absolute, so instead of just putting the markers at the very bottom of the viewport, we figure out how far they shifted down (it's safe to assume they were originally positioned in closer relation to the trigger element with values like \"top\", \"center\", a percentage or whatever, so we offset that much in the opposite direction to basically revert them to the relative position thy were at previously.\n        markerStartOffset -= gsap.getProperty(markerStartTrigger, direction.p);\n        markerEndOffset -= gsap.getProperty(markerEndTrigger, direction.p);\n\n        _shiftMarker(markerStartTrigger, direction, markerStartOffset);\n\n        _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));\n\n        _shiftMarker(markerEndTrigger, direction, markerEndOffset);\n\n        _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));\n      }\n\n      isFirstRefresh && !_refreshingAll && self.update(); // edge case - when you reload a page when it's already scrolled down, some browsers fire a \"scroll\" event before DOMContentLoaded, triggering an updateAll(). If we don't update the self.progress as part of refresh(), then when it happens next, it may record prevProgress as 0 when it really shouldn't, potentially causing a callback in an animation to fire again.\n\n      if (onRefresh && !_refreshingAll && !executingOnRefresh) {\n        // when refreshing all, we do extra work to correct pinnedContainer sizes and ensure things don't exceed the maxScroll, so we should do all the refreshes at the end after all that work so that the start/end values are corrected.\n        executingOnRefresh = true;\n        onRefresh(self);\n        executingOnRefresh = false;\n      }\n    };\n\n    self.getVelocity = function () {\n      return (scrollFunc() - scroll2) / (_getTime() - _time2) * 1000 || 0;\n    };\n\n    self.endAnimation = function () {\n      _endAnimation(self.callbackAnimation);\n\n      if (animation) {\n        scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);\n      }\n    };\n\n    self.labelToScroll = function (label) {\n      return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0;\n    };\n\n    self.getTrailing = function (name) {\n      var i = _triggers.indexOf(self),\n          a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);\n\n      return (_isString(name) ? a.filter(function (t) {\n        return t.vars.preventOverlaps === name;\n      }) : a).filter(function (t) {\n        return self.direction > 0 ? t.end <= start : t.start >= end;\n      });\n    };\n\n    self.update = function (reset, recordVelocity, forceFake) {\n      if (containerAnimation && !forceFake && !reset) {\n        return;\n      }\n\n      var scroll = _refreshingAll === true ? prevScroll : self.scroll(),\n          p = reset ? 0 : (scroll - start) / change,\n          clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\n          prevProgress = self.progress,\n          isActive,\n          wasActive,\n          toggleState,\n          action,\n          stateChanged,\n          toggled,\n          isAtMax,\n          isTakingAction;\n\n      if (recordVelocity) {\n        scroll2 = scroll1;\n        scroll1 = containerAnimation ? scrollFunc() : scroll;\n\n        if (snap) {\n          snap2 = snap1;\n          snap1 = animation && !isToggle ? animation.totalProgress() : clipped;\n        }\n      } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\n\n\n      if (anticipatePin && pin && !_refreshing && !_startup && _lastScrollTime) {\n        if (!clipped && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {\n          clipped = 0.0001;\n        } else if (clipped === 1 && end > scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {\n          clipped = 0.9999;\n        }\n      }\n\n      if (clipped !== prevProgress && self.enabled) {\n        isActive = self.isActive = !!clipped && clipped < 1;\n        wasActive = !!prevProgress && prevProgress < 1;\n        toggled = isActive !== wasActive;\n        stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\n\n        self.direction = clipped > prevProgress ? 1 : -1;\n        self.progress = clipped;\n\n        if (stateChanged && !_refreshing) {\n          toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\n\n          if (isToggle) {\n            action = !toggled && toggleActions[toggleState + 1] !== \"none\" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \"enter\" action, we should switch to the \"leave\" in this case (but only if one is defined)\n\n            isTakingAction = animation && (action === \"complete\" || action === \"reset\" || action in animation);\n          }\n        }\n\n        preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) {\n          return t.endAnimation();\n        }));\n\n        if (!isToggle) {\n          if (scrubTween && !_refreshing && !_startup) {\n            scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start); // if there's a scrub on both the container animation and this one (or a ScrollSmoother), the update order would cause this one not to have rendered yet, so it wouldn't make any progress before we .restart() it heading toward the new progress so it'd appear stuck thus we force a render here.\n\n            if (scrubTween.resetTo) {\n              scrubTween.resetTo(\"totalProgress\", clipped, animation._tTime / animation._tDur);\n            } else {\n              // legacy support (courtesy), before 3.10.0\n              scrubTween.vars.totalProgress = clipped;\n              scrubTween.invalidate().restart();\n            }\n          } else if (animation) {\n            animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));\n          }\n        }\n\n        if (pin) {\n          reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\n\n          if (!useFixedPosition) {\n            pinSetter(_round(pinStart + pinChange * clipped));\n          } else if (stateChanged) {\n            isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\n\n            if (pinReparent) {\n              if (!reset && (isActive || isAtMax)) {\n                var bounds = _getBounds(pin, true),\n                    _offset = scroll - start;\n\n                _reparent(pin, _body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);\n              } else {\n                _reparent(pin, spacer);\n              }\n            }\n\n            _setState(isActive || isAtMax ? pinActiveState : pinState);\n\n            pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));\n          }\n        }\n\n        snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\n        toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {\n          return el.classList[isActive || once ? \"add\" : \"remove\"](toggleClass.className);\n        }); // classes could affect positioning, so do it even if reset or refreshing is true.\n\n        onUpdate && !isToggle && !reset && onUpdate(self);\n\n        if (stateChanged && !_refreshing) {\n          if (isToggle) {\n            if (isTakingAction) {\n              if (action === \"complete\") {\n                animation.pause().totalProgress(1);\n              } else if (action === \"reset\") {\n                animation.restart(true).pause();\n              } else if (action === \"restart\") {\n                animation.restart(true);\n              } else {\n                animation[action]();\n              }\n            }\n\n            onUpdate && onUpdate(self);\n          }\n\n          if (toggled || !_limitCallbacks) {\n            // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\n            onToggle && toggled && _callback(self, onToggle);\n            callbacks[toggleState] && _callback(self, callbacks[toggleState]);\n            once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true.\n\n            if (!toggled) {\n              // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\n              toggleState = clipped === 1 ? 1 : 3;\n              callbacks[toggleState] && _callback(self, callbacks[toggleState]);\n            }\n          }\n\n          if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {\n            _endAnimation(self.callbackAnimation);\n\n            scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === \"reverse\" ? 1 : !clipped, 1);\n          }\n        } else if (isToggle && onUpdate && !_refreshing) {\n          onUpdate(self);\n        }\n      } // update absolutely-positioned markers (only if the scroller isn't the viewport)\n\n\n      if (markerEndSetter) {\n        var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;\n        markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));\n        markerEndSetter(n);\n      }\n\n      caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));\n    };\n\n    self.enable = function (reset, refresh) {\n      if (!self.enabled) {\n        self.enabled = true;\n\n        _addListener(scroller, \"resize\", _onResize);\n\n        isViewport || _addListener(scroller, \"scroll\", _onScroll);\n        onRefreshInit && _addListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\n        if (reset !== false) {\n          self.progress = prevProgress = 0;\n          scroll1 = scroll2 = lastSnap = scrollFunc();\n        }\n\n        refresh !== false && self.refresh();\n      }\n    };\n\n    self.getTween = function (snap) {\n      return snap && tweenTo ? tweenTo.tween : scrubTween;\n    };\n\n    self.setPositions = function (newStart, newEnd, keepClamp, pinOffset) {\n      // doesn't persist after refresh()! Intended to be a way to override values that were set during refresh(), like you could set it in onRefresh()\n      if (containerAnimation) {\n        // convert ratios into scroll positions. Remember, start/end values on ScrollTriggers that have a containerAnimation refer to the time (in seconds), NOT scroll positions.\n        var st = containerAnimation.scrollTrigger,\n            duration = containerAnimation.duration(),\n            _change = st.end - st.start;\n\n        newStart = st.start + _change * newStart / duration;\n        newEnd = st.start + _change * newEnd / duration;\n      }\n\n      self.refresh(false, false, {\n        start: _keepClamp(newStart, keepClamp && !!self._startClamp),\n        end: _keepClamp(newEnd, keepClamp && !!self._endClamp)\n      }, pinOffset);\n      self.update();\n    };\n\n    self.adjustPinSpacing = function (amount) {\n      if (spacerState && amount) {\n        var i = spacerState.indexOf(direction.d) + 1;\n        spacerState[i] = parseFloat(spacerState[i]) + amount + _px;\n        spacerState[1] = parseFloat(spacerState[1]) + amount + _px;\n\n        _setState(spacerState);\n      }\n    };\n\n    self.disable = function (reset, allowAnimation) {\n      if (self.enabled) {\n        reset !== false && self.revert(true, true);\n        self.enabled = self.isActive = false;\n        allowAnimation || scrubTween && scrubTween.pause();\n        prevScroll = 0;\n        pinCache && (pinCache.uncache = 1);\n        onRefreshInit && _removeListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\n        if (snapDelayedCall) {\n          snapDelayedCall.pause();\n          tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\n        }\n\n        if (!isViewport) {\n          var i = _triggers.length;\n\n          while (i--) {\n            if (_triggers[i].scroller === scroller && _triggers[i] !== self) {\n              return; //don't remove the listeners if there are still other triggers referencing it.\n            }\n          }\n\n          _removeListener(scroller, \"resize\", _onResize);\n\n          isViewport || _removeListener(scroller, \"scroll\", _onScroll);\n        }\n      }\n    };\n\n    self.kill = function (revert, allowAnimation) {\n      self.disable(revert, allowAnimation);\n      scrubTween && !allowAnimation && scrubTween.kill();\n      id && delete _ids[id];\n\n      var i = _triggers.indexOf(self);\n\n      i >= 0 && _triggers.splice(i, 1);\n      i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\n      // if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't.\n\n      i = 0;\n\n      _triggers.forEach(function (t) {\n        return t.scroller === self.scroller && (i = 1);\n      });\n\n      i || _refreshingAll || (self.scroll.rec = 0);\n\n      if (animation) {\n        animation.scrollTrigger = null;\n        revert && animation.revert({\n          kill: false\n        });\n        allowAnimation || animation.kill();\n      }\n\n      markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n        return m.parentNode && m.parentNode.removeChild(m);\n      });\n      _primary === self && (_primary = 0);\n\n      if (pin) {\n        pinCache && (pinCache.uncache = 1);\n        i = 0;\n\n        _triggers.forEach(function (t) {\n          return t.pin === pin && i++;\n        });\n\n        i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.\n      }\n\n      vars.onKill && vars.onKill(self);\n    };\n\n    _triggers.push(self);\n\n    self.enable(false, false);\n    customRevertReturn && customRevertReturn(self);\n\n    if (animation && animation.add && !change) {\n      // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If \"change\" is defined, we know it must be re-enabling, thus we can refresh() right away.\n      var updateFunc = self.update; // some browsers may fire a scroll event BEFORE a tick elapses and/or the DOMContentLoaded fires. So there's a chance update() will be called BEFORE a refresh() has happened on a Timeline-attached ScrollTrigger which means the start/end won't be calculated yet. We don't want to add conditional logic inside the update() method (like check to see if end is defined and if not, force a refresh()) because that's a function that gets hit a LOT (performance). So we swap out the real update() method for this one that'll re-attach it the first time it gets called and of course forces a refresh().\n\n      self.update = function () {\n        self.update = updateFunc;\n        start || end || self.refresh();\n      };\n\n      gsap.delayedCall(0.01, self.update);\n      change = 0.01;\n      start = end = 0;\n    } else {\n      self.refresh();\n    }\n\n    pin && _queueRefreshAll(); // pinning could affect the positions of other things, so make sure we queue a full refresh()\n  };\n\n  ScrollTrigger.register = function register(core) {\n    if (!_coreInitted) {\n      gsap = core || _getGSAP();\n      _windowExists() && window.document && ScrollTrigger.enable();\n      _coreInitted = _enabled;\n    }\n\n    return _coreInitted;\n  };\n\n  ScrollTrigger.defaults = function defaults(config) {\n    if (config) {\n      for (var p in config) {\n        _defaults[p] = config[p];\n      }\n    }\n\n    return _defaults;\n  };\n\n  ScrollTrigger.disable = function disable(reset, kill) {\n    _enabled = 0;\n\n    _triggers.forEach(function (trigger) {\n      return trigger[kill ? \"kill\" : \"disable\"](reset);\n    });\n\n    _removeListener(_win, \"wheel\", _onScroll);\n\n    _removeListener(_doc, \"scroll\", _onScroll);\n\n    clearInterval(_syncInterval);\n\n    _removeListener(_doc, \"touchcancel\", _passThrough);\n\n    _removeListener(_body, \"touchstart\", _passThrough);\n\n    _multiListener(_removeListener, _doc, \"pointerdown,touchstart,mousedown\", _pointerDownHandler);\n\n    _multiListener(_removeListener, _doc, \"pointerup,touchend,mouseup\", _pointerUpHandler);\n\n    _resizeDelay.kill();\n\n    _iterateAutoRefresh(_removeListener);\n\n    for (var i = 0; i < _scrollers.length; i += 3) {\n      _wheelListener(_removeListener, _scrollers[i], _scrollers[i + 1]);\n\n      _wheelListener(_removeListener, _scrollers[i], _scrollers[i + 2]);\n    }\n  };\n\n  ScrollTrigger.enable = function enable() {\n    _win = window;\n    _doc = document;\n    _docEl = _doc.documentElement;\n    _body = _doc.body;\n\n    if (gsap) {\n      _toArray = gsap.utils.toArray;\n      _clamp = gsap.utils.clamp;\n      _context = gsap.core.context || _passThrough;\n      _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;\n      _scrollRestoration = _win.history.scrollRestoration || \"auto\";\n      _lastScroll = _win.pageYOffset;\n      gsap.core.globals(\"ScrollTrigger\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \"name\" property.\n\n      if (_body) {\n        _enabled = 1;\n        _div100vh = document.createElement(\"div\"); // to solve mobile browser address bar show/hide resizing, we shouldn't rely on window.innerHeight. Instead, use a <div> with its height set to 100vh and measure that since that's what the scrolling is based on anyway and it's not affected by address bar showing/hiding.\n\n        _div100vh.style.height = \"100vh\";\n        _div100vh.style.position = \"absolute\";\n\n        _refresh100vh();\n\n        _rafBugFix();\n\n        Observer.register(gsap); // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\n\n        ScrollTrigger.isTouch = Observer.isTouch;\n        _fixIOSBug = Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent); // since 2017, iOS has had a bug that causes event.clientX/Y to be inaccurate when a scroll occurs, thus we must alternate ignoring every other touchmove event to work around it. See https://bugs.webkit.org/show_bug.cgi?id=181954 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503\n\n        _ignoreMobileResize = Observer.isTouch === 1;\n\n        _addListener(_win, \"wheel\", _onScroll); // mostly for 3rd party smooth scrolling libraries.\n\n\n        _root = [_win, _doc, _docEl, _body];\n\n        if (gsap.matchMedia) {\n          ScrollTrigger.matchMedia = function (vars) {\n            var mm = gsap.matchMedia(),\n                p;\n\n            for (p in vars) {\n              mm.add(p, vars[p]);\n            }\n\n            return mm;\n          };\n\n          gsap.addEventListener(\"matchMediaInit\", function () {\n            return _revertAll();\n          });\n          gsap.addEventListener(\"matchMediaRevert\", function () {\n            return _revertRecorded();\n          });\n          gsap.addEventListener(\"matchMedia\", function () {\n            _refreshAll(0, 1);\n\n            _dispatch(\"matchMedia\");\n          });\n          gsap.matchMedia(\"(orientation: portrait)\", function () {\n            // when orientation changes, we should take new base measurements for the ignoreMobileResize feature.\n            _setBaseDimensions();\n\n            return _setBaseDimensions;\n          });\n        } else {\n          console.warn(\"Requires GSAP 3.11.0 or later\");\n        }\n\n        _setBaseDimensions();\n\n        _addListener(_doc, \"scroll\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\n\n\n        var bodyStyle = _body.style,\n            border = bodyStyle.borderTopStyle,\n            AnimationProto = gsap.core.Animation.prototype,\n            bounds,\n            i;\n        AnimationProto.revert || Object.defineProperty(AnimationProto, \"revert\", {\n          value: function value() {\n            return this.time(-0.01, true);\n          }\n        }); // only for backwards compatibility (Animation.revert() was added after 3.10.4)\n\n        bodyStyle.borderTopStyle = \"solid\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\n\n        bounds = _getBounds(_body);\n        _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding\n\n        _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;\n        border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty(\"border-top-style\"); // TODO: (?) maybe move to leveraging the velocity mechanism in Observer and skip intervals.\n\n        _syncInterval = setInterval(_sync, 250);\n        gsap.delayedCall(0.5, function () {\n          return _startup = 0;\n        });\n\n        _addListener(_doc, \"touchcancel\", _passThrough); // some older Android devices intermittently stop dispatching \"touchmove\" events if we don't listen for \"touchcancel\" on the document.\n\n\n        _addListener(_body, \"touchstart\", _passThrough); //works around Safari bug: https://gsap.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\n\n\n        _multiListener(_addListener, _doc, \"pointerdown,touchstart,mousedown\", _pointerDownHandler);\n\n        _multiListener(_addListener, _doc, \"pointerup,touchend,mouseup\", _pointerUpHandler);\n\n        _transformProp = gsap.utils.checkPrefix(\"transform\");\n\n        _stateProps.push(_transformProp);\n\n        _coreInitted = _getTime();\n        _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\n        _autoRefresh = [_doc, \"visibilitychange\", function () {\n          var w = _win.innerWidth,\n              h = _win.innerHeight;\n\n          if (_doc.hidden) {\n            _prevWidth = w;\n            _prevHeight = h;\n          } else if (_prevWidth !== w || _prevHeight !== h) {\n            _onResize();\n          }\n        }, _doc, \"DOMContentLoaded\", _refreshAll, _win, \"load\", _refreshAll, _win, \"resize\", _onResize];\n\n        _iterateAutoRefresh(_addListener);\n\n        _triggers.forEach(function (trigger) {\n          return trigger.enable(0, 1);\n        });\n\n        for (i = 0; i < _scrollers.length; i += 3) {\n          _wheelListener(_removeListener, _scrollers[i], _scrollers[i + 1]);\n\n          _wheelListener(_removeListener, _scrollers[i], _scrollers[i + 2]);\n        }\n      }\n    }\n  };\n\n  ScrollTrigger.config = function config(vars) {\n    \"limitCallbacks\" in vars && (_limitCallbacks = !!vars.limitCallbacks);\n    var ms = vars.syncInterval;\n    ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);\n    \"ignoreMobileResize\" in vars && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize);\n\n    if (\"autoRefreshEvents\" in vars) {\n      _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \"none\");\n      _ignoreResize = (vars.autoRefreshEvents + \"\").indexOf(\"resize\") === -1;\n    }\n  };\n\n  ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {\n    var t = _getTarget(target),\n        i = _scrollers.indexOf(t),\n        isViewport = _isViewport(t);\n\n    if (~i) {\n      _scrollers.splice(i, isViewport ? 6 : 2);\n    }\n\n    if (vars) {\n      isViewport ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);\n    }\n  };\n\n  ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {\n    _triggers.forEach(function (t) {\n      return t._ctx && t._ctx.query === query && t._ctx.kill(true, true);\n    });\n  };\n\n  ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) {\n    var bounds = (_isString(element) ? _getTarget(element) : element).getBoundingClientRect(),\n        offset = bounds[horizontal ? _width : _height] * ratio || 0;\n    return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight;\n  };\n\n  ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {\n    _isString(element) && (element = _getTarget(element));\n    var bounds = element.getBoundingClientRect(),\n        size = bounds[horizontal ? _width : _height],\n        offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf(\"%\") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;\n    return horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight;\n  };\n\n  ScrollTrigger.killAll = function killAll(allowListeners) {\n    _triggers.slice(0).forEach(function (t) {\n      return t.vars.id !== \"ScrollSmoother\" && t.kill();\n    });\n\n    if (allowListeners !== true) {\n      var listeners = _listeners.killAll || [];\n      _listeners = {};\n      listeners.forEach(function (f) {\n        return f();\n      });\n    }\n  };\n\n  return ScrollTrigger;\n}();\nScrollTrigger.version = \"3.12.5\";\n\nScrollTrigger.saveStyles = function (targets) {\n  return targets ? _toArray(targets).forEach(function (target) {\n    // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...]\n    if (target && target.style) {\n      var i = _savedStyles.indexOf(target);\n\n      i >= 0 && _savedStyles.splice(i, 5);\n\n      _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute(\"transform\"), gsap.core.getCache(target), _context());\n    }\n  }) : _savedStyles;\n};\n\nScrollTrigger.revert = function (soft, media) {\n  return _revertAll(!soft, media);\n};\n\nScrollTrigger.create = function (vars, animation) {\n  return new ScrollTrigger(vars, animation);\n};\n\nScrollTrigger.refresh = function (safe) {\n  return safe ? _onResize() : (_coreInitted || ScrollTrigger.register()) && _refreshAll(true);\n};\n\nScrollTrigger.update = function (force) {\n  return ++_scrollers.cache && _updateAll(force === true ? 2 : 0);\n};\n\nScrollTrigger.clearScrollMemory = _clearScrollMemory;\n\nScrollTrigger.maxScroll = function (element, horizontal) {\n  return _maxScroll(element, horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getScrollFunc = function (element, horizontal) {\n  return _getScrollFunc(_getTarget(element), horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getById = function (id) {\n  return _ids[id];\n};\n\nScrollTrigger.getAll = function () {\n  return _triggers.filter(function (t) {\n    return t.vars.id !== \"ScrollSmoother\";\n  });\n}; // it's common for people to ScrollTrigger.getAll(t => t.kill()) on page routes, for example, and we don't want it to ruin smooth scrolling by killing the main ScrollSmoother one.\n\n\nScrollTrigger.isScrolling = function () {\n  return !!_lastScrollTime;\n};\n\nScrollTrigger.snapDirectional = _snapDirectional;\n\nScrollTrigger.addEventListener = function (type, callback) {\n  var a = _listeners[type] || (_listeners[type] = []);\n  ~a.indexOf(callback) || a.push(callback);\n};\n\nScrollTrigger.removeEventListener = function (type, callback) {\n  var a = _listeners[type],\n      i = a && a.indexOf(callback);\n  i >= 0 && a.splice(i, 1);\n};\n\nScrollTrigger.batch = function (targets, vars) {\n  var result = [],\n      varsCopy = {},\n      interval = vars.interval || 0.016,\n      batchMax = vars.batchMax || 1e9,\n      proxyCallback = function proxyCallback(type, callback) {\n    var elements = [],\n        triggers = [],\n        delay = gsap.delayedCall(interval, function () {\n      callback(elements, triggers);\n      elements = [];\n      triggers = [];\n    }).pause();\n    return function (self) {\n      elements.length || delay.restart(true);\n      elements.push(self.trigger);\n      triggers.push(self);\n      batchMax <= elements.length && delay.progress(1);\n    };\n  },\n      p;\n\n  for (p in vars) {\n    varsCopy[p] = p.substr(0, 2) === \"on\" && _isFunction(vars[p]) && p !== \"onRefreshInit\" ? proxyCallback(p, vars[p]) : vars[p];\n  }\n\n  if (_isFunction(batchMax)) {\n    batchMax = batchMax();\n\n    _addListener(ScrollTrigger, \"refresh\", function () {\n      return batchMax = vars.batchMax();\n    });\n  }\n\n  _toArray(targets).forEach(function (target) {\n    var config = {};\n\n    for (p in varsCopy) {\n      config[p] = varsCopy[p];\n    }\n\n    config.trigger = target;\n    result.push(ScrollTrigger.create(config));\n  });\n\n  return result;\n}; // to reduce file size. clamps the scroll and also returns a duration multiplier so that if the scroll gets chopped shorter, the duration gets curtailed as well (otherwise if you're very close to the top of the page, for example, and swipe up really fast, it'll suddenly slow down and take a long time to reach the top).\n\n\nvar _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier(scrollFunc, current, end, max) {\n  current > max ? scrollFunc(max) : current < 0 && scrollFunc(0);\n  return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;\n},\n    _allowNativePanning = function _allowNativePanning(target, direction) {\n  if (direction === true) {\n    target.style.removeProperty(\"touch-action\");\n  } else {\n    target.style.touchAction = direction === true ? \"auto\" : direction ? \"pan-\" + direction + (Observer.isTouch ? \" pinch-zoom\" : \"\") : \"none\"; // note: Firefox doesn't support it pinch-zoom properly, at least in addition to a pan-x or pan-y.\n  }\n\n  target === _docEl && _allowNativePanning(_body, direction);\n},\n    _overflow = {\n  auto: 1,\n  scroll: 1\n},\n    _nestedScroll = function _nestedScroll(_ref5) {\n  var event = _ref5.event,\n      target = _ref5.target,\n      axis = _ref5.axis;\n\n  var node = (event.changedTouches ? event.changedTouches[0] : event).target,\n      cache = node._gsap || gsap.core.getCache(node),\n      time = _getTime(),\n      cs;\n\n  if (!cache._isScrollT || time - cache._isScrollT > 2000) {\n    // cache for 2 seconds to improve performance.\n    while (node && node !== _body && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) {\n      node = node.parentNode;\n    }\n\n    cache._isScroll = node && node !== target && !_isViewport(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]);\n    cache._isScrollT = time;\n  }\n\n  if (cache._isScroll || axis === \"x\") {\n    event.stopPropagation();\n    event._gsapAllow = true;\n  }\n},\n    // capture events on scrollable elements INSIDE the <body> and allow those by calling stopPropagation() when we find a scrollable ancestor\n_inputObserver = function _inputObserver(target, type, inputs, nested) {\n  return Observer.create({\n    target: target,\n    capture: true,\n    debounce: false,\n    lockAxis: true,\n    type: type,\n    onWheel: nested = nested && _nestedScroll,\n    onPress: nested,\n    onDrag: nested,\n    onScroll: nested,\n    onEnable: function onEnable() {\n      return inputs && _addListener(_doc, Observer.eventTypes[0], _captureInputs, false, true);\n    },\n    onDisable: function onDisable() {\n      return _removeListener(_doc, Observer.eventTypes[0], _captureInputs, true);\n    }\n  });\n},\n    _inputExp = /(input|label|select|textarea)/i,\n    _inputIsFocused,\n    _captureInputs = function _captureInputs(e) {\n  var isInput = _inputExp.test(e.target.tagName);\n\n  if (isInput || _inputIsFocused) {\n    e._gsapAllow = true;\n    _inputIsFocused = isInput;\n  }\n},\n    _getScrollNormalizer = function _getScrollNormalizer(vars) {\n  _isObject(vars) || (vars = {});\n  vars.preventDefault = vars.isNormalizer = vars.allowClicks = true;\n  vars.type || (vars.type = \"wheel,touch\");\n  vars.debounce = !!vars.debounce;\n  vars.id = vars.id || \"normalizer\";\n\n  var _vars2 = vars,\n      normalizeScrollX = _vars2.normalizeScrollX,\n      momentum = _vars2.momentum,\n      allowNestedScroll = _vars2.allowNestedScroll,\n      onRelease = _vars2.onRelease,\n      self,\n      maxY,\n      target = _getTarget(vars.target) || _docEl,\n      smoother = gsap.core.globals().ScrollSmoother,\n      smootherInstance = smoother && smoother.get(),\n      content = _fixIOSBug && (vars.content && _getTarget(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()),\n      scrollFuncY = _getScrollFunc(target, _vertical),\n      scrollFuncX = _getScrollFunc(target, _horizontal),\n      scale = 1,\n      initialScale = (Observer.isTouch && _win.visualViewport ? _win.visualViewport.scale * _win.visualViewport.width : _win.outerWidth) / _win.innerWidth,\n      wheelRefresh = 0,\n      resolveMomentumDuration = _isFunction(momentum) ? function () {\n    return momentum(self);\n  } : function () {\n    return momentum || 2.8;\n  },\n      lastRefreshID,\n      skipTouchMove,\n      inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll),\n      resumeTouchMove = function resumeTouchMove() {\n    return skipTouchMove = false;\n  },\n      scrollClampX = _passThrough,\n      scrollClampY = _passThrough,\n      updateClamps = function updateClamps() {\n    maxY = _maxScroll(target, _vertical);\n    scrollClampY = _clamp(_fixIOSBug ? 1 : 0, maxY);\n    normalizeScrollX && (scrollClampX = _clamp(0, _maxScroll(target, _horizontal)));\n    lastRefreshID = _refreshID;\n  },\n      removeContentOffset = function removeContentOffset() {\n    content._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + \"px\";\n    content.style.transform = \"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \" + parseFloat(content._gsap.y) + \", 0, 1)\";\n    scrollFuncY.offset = scrollFuncY.cacheID = 0;\n  },\n      ignoreDrag = function ignoreDrag() {\n    if (skipTouchMove) {\n      requestAnimationFrame(resumeTouchMove);\n\n      var offset = _round(self.deltaY / 2),\n          scroll = scrollClampY(scrollFuncY.v - offset);\n\n      if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {\n        scrollFuncY.offset = scroll - scrollFuncY.v;\n\n        var y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);\n\n        content.style.transform = \"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \" + y + \", 0, 1)\";\n        content._gsap.y = y + \"px\";\n        scrollFuncY.cacheID = _scrollers.cache;\n\n        _updateAll();\n      }\n\n      return true;\n    }\n\n    scrollFuncY.offset && removeContentOffset();\n    skipTouchMove = true;\n  },\n      tween,\n      startScrollX,\n      startScrollY,\n      onStopDelayedCall,\n      onResize = function onResize() {\n    // if the window resizes, like on an iPhone which Apple FORCES the address bar to show/hide even if we event.preventDefault(), it may be scrolling too far now that the address bar is showing, so we must dynamically adjust the momentum tween.\n    updateClamps();\n\n    if (tween.isActive() && tween.vars.scrollY > maxY) {\n      scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo(\"scrollY\", maxY);\n    }\n  };\n\n  content && gsap.set(content, {\n    y: \"+=0\"\n  }); // to ensure there's a cache (element._gsap)\n\n  vars.ignoreCheck = function (e) {\n    return _fixIOSBug && e.type === \"touchmove\" && ignoreDrag(e) || scale > 1.05 && e.type !== \"touchstart\" || self.isGesturing || e.touches && e.touches.length > 1;\n  };\n\n  vars.onPress = function () {\n    skipTouchMove = false;\n    var prevScale = scale;\n    scale = _round((_win.visualViewport && _win.visualViewport.scale || 1) / initialScale);\n    tween.pause();\n    prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : \"x\");\n    startScrollX = scrollFuncX();\n    startScrollY = scrollFuncY();\n    updateClamps();\n    lastRefreshID = _refreshID;\n  };\n\n  vars.onRelease = vars.onGestureStart = function (self, wasDragging) {\n    scrollFuncY.offset && removeContentOffset();\n\n    if (!wasDragging) {\n      onStopDelayedCall.restart(true);\n    } else {\n      _scrollers.cache++; // make sure we're pulling the non-cached value\n      // alternate algorithm: durX = Math.min(6, Math.abs(self.velocityX / 800)),\tdur = Math.max(durX, Math.min(6, Math.abs(self.velocityY / 800))); dur = dur * (0.4 + (1 - _power4In(dur / 6)) * 0.6)) * (momentumSpeed || 1)\n\n      var dur = resolveMomentumDuration(),\n          currentScroll,\n          endScroll;\n\n      if (normalizeScrollX) {\n        currentScroll = scrollFuncX();\n        endScroll = currentScroll + dur * 0.05 * -self.velocityX / 0.227; // the constant .227 is from power4(0.05). velocity is inverted because scrolling goes in the opposite direction.\n\n        dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _horizontal));\n        tween.vars.scrollX = scrollClampX(endScroll);\n      }\n\n      currentScroll = scrollFuncY();\n      endScroll = currentScroll + dur * 0.05 * -self.velocityY / 0.227; // the constant .227 is from power4(0.05)\n\n      dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _vertical));\n      tween.vars.scrollY = scrollClampY(endScroll);\n      tween.invalidate().duration(dur).play(0.01);\n\n      if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) {\n        // iOS bug: it'll show the address bar but NOT fire the window \"resize\" event until the animation is done but we must protect against overshoot so we leverage an onUpdate to do so.\n        gsap.to({}, {\n          onUpdate: onResize,\n          duration: dur\n        });\n      }\n    }\n\n    onRelease && onRelease(self);\n  };\n\n  vars.onWheel = function () {\n    tween._ts && tween.pause();\n\n    if (_getTime() - wheelRefresh > 1000) {\n      // after 1 second, refresh the clamps otherwise that'll only happen when ScrollTrigger.refresh() is called or for touch-scrolling.\n      lastRefreshID = 0;\n      wheelRefresh = _getTime();\n    }\n  };\n\n  vars.onChange = function (self, dx, dy, xArray, yArray) {\n    _refreshID !== lastRefreshID && updateClamps();\n    dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1])); // for more precision, we track pointer/touch movement from the start, otherwise it'll drift.\n\n    if (dy) {\n      scrollFuncY.offset && removeContentOffset();\n      var isTouch = yArray[2] === dy,\n          y = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1],\n          yClamped = scrollClampY(y);\n      isTouch && y !== yClamped && (startScrollY += yClamped - y);\n      scrollFuncY(yClamped);\n    }\n\n    (dy || dx) && _updateAll();\n  };\n\n  vars.onEnable = function () {\n    _allowNativePanning(target, normalizeScrollX ? false : \"x\");\n\n    ScrollTrigger.addEventListener(\"refresh\", onResize);\n\n    _addListener(_win, \"resize\", onResize);\n\n    if (scrollFuncY.smooth) {\n      scrollFuncY.target.style.scrollBehavior = \"auto\";\n      scrollFuncY.smooth = scrollFuncX.smooth = false;\n    }\n\n    inputObserver.enable();\n  };\n\n  vars.onDisable = function () {\n    _allowNativePanning(target, true);\n\n    _removeListener(_win, \"resize\", onResize);\n\n    ScrollTrigger.removeEventListener(\"refresh\", onResize);\n    inputObserver.kill();\n  };\n\n  vars.lockAxis = vars.lockAxis !== false;\n  self = new Observer(vars);\n  self.iOS = _fixIOSBug; // used in the Observer getCachedScroll() function to work around an iOS bug that wreaks havoc with TouchEvent.clientY if we allow scroll to go all the way back to 0.\n\n  _fixIOSBug && !scrollFuncY() && scrollFuncY(1); // iOS bug causes event.clientY values to freak out (wildly inaccurate) if the scroll position is exactly 0.\n\n  _fixIOSBug && gsap.ticker.add(_passThrough); // prevent the ticker from sleeping\n\n  onStopDelayedCall = self._dc;\n  tween = gsap.to(self, {\n    ease: \"power4\",\n    paused: true,\n    inherit: false,\n    scrollX: normalizeScrollX ? \"+=0.1\" : \"+=0\",\n    scrollY: \"+=0.1\",\n    modifiers: {\n      scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function () {\n        return tween.pause();\n      })\n    },\n    onUpdate: _updateAll,\n    onComplete: onStopDelayedCall.vars.onComplete\n  }); // we need the modifier to sense if the scroll position is altered outside of the momentum tween (like with a scrollTo tween) so we can pause() it to prevent conflicts.\n\n  return self;\n};\n\nScrollTrigger.sort = function (func) {\n  return _triggers.sort(func || function (a, b) {\n    return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);\n  });\n};\n\nScrollTrigger.observe = function (vars) {\n  return new Observer(vars);\n};\n\nScrollTrigger.normalizeScroll = function (vars) {\n  if (typeof vars === \"undefined\") {\n    return _normalizer;\n  }\n\n  if (vars === true && _normalizer) {\n    return _normalizer.enable();\n  }\n\n  if (vars === false) {\n    _normalizer && _normalizer.kill();\n    _normalizer = vars;\n    return;\n  }\n\n  var normalizer = vars instanceof Observer ? vars : _getScrollNormalizer(vars);\n  _normalizer && _normalizer.target === normalizer.target && _normalizer.kill();\n  _isViewport(normalizer.target) && (_normalizer = normalizer);\n  return normalizer;\n};\n\nScrollTrigger.core = {\n  // smaller file size way to leverage in ScrollSmoother and Observer\n  _getVelocityProp: _getVelocityProp,\n  _inputObserver: _inputObserver,\n  _scrollers: _scrollers,\n  _proxies: _proxies,\n  bridge: {\n    // when normalizeScroll sets the scroll position (ss = setScroll)\n    ss: function ss() {\n      _lastScrollTime || _dispatch(\"scrollStart\");\n      _lastScrollTime = _getTime();\n    },\n    // a way to get the _refreshing value in Observer\n    ref: function ref() {\n      return _refreshing;\n    }\n  }\n};\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\nexport { ScrollTrigger as default };","import cn from 'classnames';\n\nconst SectionTitle = ({ className, html, children }) => {\n  const baseClass = cn(\n    \"mt-2 font-headline text-2xl font-[500] leading-7 text-new-navy md:text-3xl md:leading-snug\",\n    className,\n  );\n\n  return html ? (\n    // eslint-disable-next-line jsx-a11y/heading-has-content\n    <h2\n      className={baseClass}\n      {...(html ? { dangerouslySetInnerHTML: { __html: html } } : {})} />\n  ) : (\n    <h2 className={baseClass}>\n      {children || \"Default Heading Content\"}\n    </h2>\n  );\n};\n\nexport default SectionTitle;","import HTMLReactParser from '../lib/index.js';\n\nexport {\n  Comment,\n  Element,\n  ProcessingInstruction,\n  Text,\n  attributesToProps,\n  domToReact,\n  htmlToDOM,\n} from '../lib/index.js';\n\nexport default HTMLReactParser.default || HTMLReactParser;\n","import { PageContext } from \"@/src/App\";\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport gsap from \"gsap\";\nimport { useGSAP } from \"@gsap/react\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useContext } from \"react\";\nimport copy from \"@/data/copy.json\";\nimport SectionTitle from \"./SectionTitle\";\nimport parse from 'html-react-parser';\n\ngsap.registerPlugin(useGSAP);\ngsap.registerPlugin(ScrollTrigger);\n\nconst ClosingSection = ({ state }) => {\n  const { setActiveSection } = useContext(PageContext);\n\n  useGSAP(\n    () => {\n      ScrollTrigger.create({\n        trigger: \"#methodology\",\n        start: \"top 25%\",\n        onEnter: () => {\n          setActiveSection(\"methodology\");\n        },\n        onLeaveBack: () => {\n          setActiveSection(\"policy-analysis\");\n        },\n      });\n    },\n    { dependencies: [state], revertOnUpdate: true },\n  );\n\n  function makeItalic(text) {\n    let withSpan = \"<span>\" + text + \"</span>\"\n    return withSpan\n  }\n\n  return (\n    <div id=\"methodology\" className=\"px-6 pt-10 pb-20 bg-gray-95 md:p-20\">\n      {/* How we collect the data */}\n      <section className=\"px-4 m-auto max-w-7xl\">\n        <SectionTitle>{copy.tracking[0].title}</SectionTitle>\n        <div className=\"flex flex-col gap-10 mt-4 text-sm md:mt-8 md:grid md:grid-cols-2 md:text-base\">\n          <div className=\"space-y-5\">\n            {copy.tracking[0].text.map(({ value }, i) => {\n              return (\n                <p key={i}\n                className=\"font-sans\"\n                {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n              );\n            })}\n            <Accordion type=\"single\" collapsible className=\"w-full\">\n              <AccordionItem value=\"item-1\">\n                <AccordionTrigger className=\"font-sans\">\n                  {parse(makeItalic(copy.tracking[0].details[0].summary))}\n                </AccordionTrigger>\n                <AccordionContent>\n                  {copy.tracking[0].details[0].sumtext.map(({ value }, i) => (\n                    <p key={i}\n                    className=\"font-sans\"\n                    {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n                  ))}\n                </AccordionContent>\n              </AccordionItem>\n            </Accordion>\n          </div>\n          <div>\n            <Accordion type=\"single\" collapsible className=\"w-full\">\n              {copy.tracking[0].details\n                .slice(1)\n                .map(({ summary, sumtext }, i) => (\n                  <AccordionItem key={i} value={`item-${i}`}>\n                    <AccordionTrigger  className=\"font-sans\">{summary}</AccordionTrigger>\n                    <AccordionContent className=\"space-y-5\">\n                      {sumtext.map(({ value }, i) => (\n                        <p\n                        className=\"font-sans\"\n                          key={i}\n                          {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n                      ))}\n                    </AccordionContent>\n                  </AccordionItem>\n                ))}\n            </Accordion>\n          </div>\n        </div>\n      </section>\n\n      {/* How we collect the data */}\n      <section className=\"mx-auto mt-20 md:mt-40 max-w-7xl\">\n        <SectionTitle>{copy.collect[0].title}</SectionTitle>\n        <div className=\"flex flex-col gap-10 mt-5 text-sm md:mt-8 md:grid md:grid-cols-2 md:text-base\">\n          <div className=\"space-y-5\">\n            {copy.collect[0].text.map(({ value }, i) => {\n              return (\n                <p key={i} className=\"font-sans\"\n                {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n              );\n            })}\n            <Accordion type=\"single\" collapsible className=\"w-full\">\n              <AccordionItem value=\"item-1\">\n                <AccordionTrigger className=\"font-sans\">\n                  {copy.collect[0].details[0].summary}\n                </AccordionTrigger>\n                <AccordionContent className=\"space-y-5\">\n                  {copy.collect[0].details[0].sumtext.map(({ value }, i) => (\n                    <p key={i}\n                    className=\"font-sans\"\n                    {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n                  ))}\n                </AccordionContent>\n              </AccordionItem>\n            </Accordion>\n          </div>\n          <div>\n            <Accordion type=\"single\" collapsible className=\"w-full\">\n              {copy.collect[0].details\n                .slice(1)\n                .map(({ summary, sumtext }, i) => (\n                  <AccordionItem key={i} value={`item-${i}`}>\n                    <AccordionTrigger className=\"font-sans\">{summary}</AccordionTrigger>\n                    <AccordionContent className=\"space-y-5\">\n                      {sumtext.map(({ value }, i) => (\n                        <p\n                        className=\"font-sans\"\n                          key={i}\n                          {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n                      ))}\n                    </AccordionContent>\n                  </AccordionItem>\n                ))}\n            </Accordion>\n          </div>\n        </div>\n      </section>\n      {/* Acknowledgements */}\n      <section className=\"mx-auto mt-20 md:mt-40 max-w-7xl\">\n        <div className=\"grid grid-cols-2 gap-10 mt-8\">\n          <SectionTitle>Acknowledgments</SectionTitle>\n          <SectionTitle className=\"hidden md:block\">Key staff</SectionTitle>\n        </div>\n        <div className=\"flex flex-col gap-10 mt-5 md:mt-8 md:grid md:grid-cols-2\">\n          {/* Acknowledgements */}\n          <div className=\"space-y-5 text-sm md:text-base\">\n            {copy.acknowledgements.map(({ value }, i) => {\n              return (\n                <p key={i}\n                className=\"font-sans\"\n                {...(value ? { dangerouslySetInnerHTML: { __html: value } } : {})} />\n              );\n            })}\n          </div>\n          {/* Key staff */}\n          <SectionTitle className=\"md:hidden\">Key staff</SectionTitle>\n          <div className=\"grid grid-cols-2 gap-4 -mt-4 md:-mt-1\">\n            {copy[\"key-staff\"].map((d) => {\n              return (\n                <a\n                  href={d.staffURL}\n                  target=\"_blank\"\n                  key={d.staff}\n                  className=\"flex items-start gap-2 no-underline\" rel=\"noreferrer\"\n                >\n                  <div className=\"flex-none w-16 h-16 rounded-sm bg-gray-90 hover:opacity-80\">\n                    <img\n                      className=\"object-cover object-top w-full h-full rounded-sm\"\n                      src={d.imageURL}\n                      alt=''\n                    />\n                  </div>\n                  <div>\n                    <div className=\"text-sm font-medium leading-4 underline st-staff-name text-new-navy md:text-base hover:text-new-violet-blue\">\n                      {d.staff}\n                    </div>\n                    <div className=\"mt-1 text-xs italic font-normal leading-4 st-staff-title text-gray-40 md:-mt-1 md:text-sm\">\n                      {d.title}\n                    </div>\n                  </div>\n                </a>\n              );\n            })}\n          </div>\n        </div>\n      </section>\n    </div>\n  );\n};\n\nexport default ClosingSection;\n","/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use contrustor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   )\n * }\n */\nexport function constructFrom(date, value) {\n  if (date instanceof Date) {\n    return new date.constructor(value);\n  } else {\n    return new Date(value);\n  }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n","import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n  return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n","const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n","export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n","const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\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  wide: [\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};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n","export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n","export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n  const argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === \"object\" && argStr === \"[object Date]\")\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new argument.constructor(+argument);\n  } else if (\n    typeof argument === \"number\" ||\n    argStr === \"[object Number]\" ||\n    typeof argument === \"string\" ||\n    argStr === \"[object String]\"\n  ) {\n    // TODO: Can we get rid of as?\n    return new Date(argument);\n  } else {\n    // TODO: Can we get rid of as?\n    return new Date(NaN);\n  }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n  const date =\n    constructor instanceof Date\n      ? constructFrom(constructor, 0)\n      : new constructor(0);\n  date.setFullYear(\n    fromDate.getFullYear(),\n    fromDate.getMonth(),\n    fromDate.getDate(),\n  );\n  date.setHours(\n    fromDate.getHours(),\n    fromDate.getMinutes(),\n    fromDate.getSeconds(),\n    fromDate.getMilliseconds(),\n  );\n  return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n","import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n  subPriority = 0;\n\n  validate(_utcDate, _options) {\n    return true;\n  }\n}\n\nexport class ValueSetter extends Setter {\n  constructor(\n    value,\n\n    validateValue,\n\n    setValue,\n\n    priority,\n    subPriority,\n  ) {\n    super();\n    this.value = value;\n    this.validateValue = validateValue;\n    this.setValue = setValue;\n    this.priority = priority;\n    if (subPriority) {\n      this.subPriority = subPriority;\n    }\n  }\n\n  validate(date, options) {\n    return this.validateValue(date, this.value, options);\n  }\n\n  set(date, flags, options) {\n    return this.setValue(date, flags, this.value, options);\n  }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n  priority = TIMEZONE_UNIT_PRIORITY;\n  subPriority = -1;\n  set(date, flags) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(date, transpose(date, Date));\n  }\n}\n","import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n  run(dateString, token, match, options) {\n    const result = this.parse(dateString, token, match, options);\n    if (!result) {\n      return null;\n    }\n\n    return {\n      setter: new ValueSetter(\n        result.value,\n        this.validate,\n        this.set,\n        this.priority,\n        this.subPriority,\n      ),\n      rest: result.rest,\n    };\n  }\n\n  validate(_utcDate, _value, _options) {\n    return true;\n  }\n}\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n","export const numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n","import {\n  millisecondsInHour,\n  millisecondsInMinute,\n  millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest,\n  };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === \"Z\") {\n    return {\n      value: 0,\n      rest: dateString.slice(1),\n    };\n  }\n\n  const sign = matchResult[1] === \"+\" ? 1 : -1;\n  const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n  return {\n    value:\n      sign *\n      (hours * millisecondsInHour +\n        minutes * millisecondsInMinute +\n        seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case \"morning\":\n      return 4;\n    case \"evening\":\n      return 17;\n    case \"pm\":\n    case \"noon\":\n    case \"afternoon\":\n      return 12;\n    case \"am\":\n    case \"midnight\":\n    case \"night\":\n    default:\n      return 0;\n  }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  const isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n  let result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    const rangeEnd = absCurrentYear + 50;\n    const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n    const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n  return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n  const _date = toDate(date);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n  const _date = toDate(date);\n  const diff = getWeek(_date, options) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n  const _date = toDate(date);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n  const year = getISOWeekYear(date);\n  const fourthOfJanuary = constructFrom(date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n  const _date = toDate(date);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n  const _date = toDate(date);\n  const diff = getISOWeek(_date) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n  31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n  priority = 90;\n  subPriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"d\":\n        return parseNumericPattern(numericPatterns.date, dateString);\n      case \"do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    const month = date.getMonth();\n    if (isLeapYear) {\n      return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n    } else {\n      return value >= 1 && value <= DAYS_IN_MONTH[month];\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setDate(value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n  const _date = toDate(date);\n  if (isNaN(amount)) return constructFrom(date, NaN);\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date);\n  const currentDay = _date.getDay();\n\n  const remainder = day % 7;\n  const dayIndex = (remainder + 7) % 7;\n\n  const delta = 7 - weekStartsOn;\n  const diff =\n    day < 0 || day > 6\n      ? day - ((currentDay + delta) % 7)\n      : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n  return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n  const _date = toDate(date);\n  let day = _date.getDay();\n\n  if (day === 0) {\n    day = 7;\n  }\n\n  return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n","import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n  const _date = toDate(date);\n  const currentDay = getISODay(_date);\n  const diff = day - currentDay;\n  return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n","import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n","import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser(),\n};\n","import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n  priority = 140;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return (\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n\n      // A, B\n      case \"GGGGG\":\n        return match.era(dateString, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return (\n          match.era(dateString, { width: \"wide\" }) ||\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n    }\n  }\n\n  set(date, flags, value) {\n    flags.era = value;\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n  priority = 130;\n  incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"yy\",\n    });\n\n    switch (token) {\n      case \"y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value) {\n    const currentYear = date.getFullYear();\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(normalizedTwoDigitYear, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"YY\",\n    });\n\n    switch (token) {\n      case \"Y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"Yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value, options) {\n    const currentYear = getWeekYear(date, options);\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(\n        normalizedTwoDigitYear,\n        0,\n        options.firstWeekContainsDate,\n      );\n      date.setHours(0, 0, 0, 0);\n      return startOfWeek(date, options);\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, options.firstWeekContainsDate);\n    date.setHours(0, 0, 0, 0);\n    return startOfWeek(date, options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"R\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    const firstWeekOfYear = constructFrom(date, 0);\n    firstWeekOfYear.setFullYear(value, 0, 4);\n    firstWeekOfYear.setHours(0, 0, 0, 0);\n    return startOfISOWeek(firstWeekOfYear);\n  }\n\n  incompatibleTokens = [\n    \"G\",\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"u\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n      case \"QQ\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n      case \"qq\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"M\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"MM\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // J, F, ..., D\n      case \"MMMMM\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"LL\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // J, F, ..., D\n      case \"LLLLL\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"w\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"wo\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value, options) {\n    return startOfWeek(setWeek(date, value, options), options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"I\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"Io\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value) {\n    return startOfISOWeek(setISOWeek(date, value));\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n  priority = 90;\n\n  subpriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"D\":\n      case \"DD\":\n        return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n      case \"Do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear) {\n      return value >= 1 && value <= 366;\n    } else {\n      return value >= 1 && value <= 365;\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(0, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"EEEEE\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n  priority = 90;\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"e\":\n      case \"ee\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"eo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"eee\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"eeeee\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"eeee\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"c\":\n      case \"cc\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"co\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"ccc\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // T\n      case \"ccccc\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // Tuesday\n      case \"cccc\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => {\n      if (value === 0) {\n        return 7;\n      }\n      return value;\n    };\n\n    switch (token) {\n      // 2\n      case \"i\":\n      case \"ii\": // 02\n        return parseNDigits(token.length, dateString);\n      // 2nd\n      case \"io\":\n        return match.ordinalNumber(dateString, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // T\n      case \"iiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          }),\n          valueCallback,\n        );\n      // Tu\n      case \"iiiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // Tuesday\n      case \"iiii\":\n      default:\n        return mapValue(\n          match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"abbreviated\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 7;\n  }\n\n  set(date, _flags, value) {\n    date = setISODay(date, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n      case \"aaa\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"aaaaa\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n      case \"bbb\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"bbbbb\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"BBBBB\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"h\":\n        return parseNumericPattern(numericPatterns.hour12h, dateString);\n      case \"ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 12;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else if (!isPM && value === 12) {\n      date.setHours(0, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"H\":\n        return parseNumericPattern(numericPatterns.hour23h, dateString);\n      case \"Ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 23;\n  }\n\n  set(date, _flags, value) {\n    date.setHours(value, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"K\":\n        return parseNumericPattern(numericPatterns.hour11h, dateString);\n      case \"Ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"k\":\n        return parseNumericPattern(numericPatterns.hour24h, dateString);\n      case \"ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 24;\n  }\n\n  set(date, _flags, value) {\n    const hours = value <= 24 ? value % 24 : value;\n    date.setHours(hours, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n  priority = 60;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"m\":\n        return parseNumericPattern(numericPatterns.minute, dateString);\n      case \"mo\":\n        return match.ordinalNumber(dateString, { unit: \"minute\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setMinutes(value, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n  priority = 50;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"s\":\n        return parseNumericPattern(numericPatterns.second, dateString);\n      case \"so\":\n        return match.ordinalNumber(dateString, { unit: \"second\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setSeconds(value, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n  priority = 30;\n\n  parse(dateString, token) {\n    const valueCallback = (value) =>\n      Math.trunc(value * Math.pow(10, -token.length + 3));\n    return mapValue(parseNDigits(token.length, dateString), valueCallback);\n  }\n\n  set(date, _flags, value) {\n    date.setMilliseconds(value);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"X\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"XX\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"XXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"XXXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"XXX\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"x\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"xx\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"xxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"xxxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"xxx\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n  priority = 40;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n  priority = 20;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n","import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n *    and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  if (formatStr === \"\") {\n    if (dateStr === \"\") {\n      return toDate(referenceDate);\n    } else {\n      return constructFrom(referenceDate, NaN);\n    }\n  }\n\n  const subFnOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  // If timezone isn't specified, it will be set to the system timezone\n  const setters = [new DateToSystemTimezoneSetter()];\n\n  const tokens = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter in longFormatters) {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp);\n\n  const usedTokens = [];\n\n  for (let token of tokens) {\n    if (\n      !options?.useAdditionalWeekYearTokens &&\n      isProtectedWeekYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n    if (\n      !options?.useAdditionalDayOfYearTokens &&\n      isProtectedDayOfYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n\n    const firstCharacter = token[0];\n    const parser = parsers[firstCharacter];\n    if (parser) {\n      const { incompatibleTokens } = parser;\n      if (Array.isArray(incompatibleTokens)) {\n        const incompatibleToken = usedTokens.find(\n          (usedToken) =>\n            incompatibleTokens.includes(usedToken.token) ||\n            usedToken.token === firstCharacter,\n        );\n        if (incompatibleToken) {\n          throw new RangeError(\n            `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n          );\n        }\n      } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n        throw new RangeError(\n          `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n        );\n      }\n\n      usedTokens.push({ token: firstCharacter, fullToken: token });\n\n      const parseResult = parser.run(\n        dateStr,\n        token,\n        locale.match,\n        subFnOptions,\n      );\n\n      if (!parseResult) {\n        return constructFrom(referenceDate, NaN);\n      }\n\n      setters.push(parseResult.setter);\n\n      dateStr = parseResult.rest;\n    } else {\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\";\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token);\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateStr.indexOf(token) === 0) {\n        dateStr = dateStr.slice(token.length);\n      } else {\n        return constructFrom(referenceDate, NaN);\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n    return constructFrom(referenceDate, NaN);\n  }\n\n  const uniquePrioritySetters = setters\n    .map((setter) => setter.priority)\n    .sort((a, b) => b - a)\n    .filter((priority, index, array) => array.indexOf(priority) === index)\n    .map((priority) =>\n      setters\n        .filter((setter) => setter.priority === priority)\n        .sort((a, b) => b.subPriority - a.subPriority),\n    )\n    .map((setterArray) => setterArray[0]);\n\n  let date = toDate(referenceDate);\n\n  if (isNaN(date.getTime())) {\n    return constructFrom(referenceDate, NaN);\n  }\n\n  const flags = {};\n  for (const setter of uniquePrioritySetters) {\n    if (!setter.validate(date, subFnOptions)) {\n      return constructFrom(referenceDate, NaN);\n    }\n\n    const result = setter.set(date, flags, subFnOptions);\n    // Result is tuple (date, flags)\n    if (Array.isArray(result)) {\n      date = result[0];\n      Object.assign(flags, result[1]);\n      // Result is date\n    } else {\n      date = result;\n    }\n  }\n\n  return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n","import { invert } from \"lodash\";\nimport idToState from \"./us-abbr.json\";\nimport timeline from \"@/data/data_state_timeline.json\";\n\nconst stateToAbUnfiltered = {\n  \"United States\": \"US\",\n  Alabama: \"AL\",\n  Alaska: \"AK\",\n  \"American Samoa\": \"AS\",\n  Arizona: \"AZ\",\n  Arkansas: \"AR\",\n  California: \"CA\",\n  Colorado: \"CO\",\n  Connecticut: \"CT\",\n  Delaware: \"DE\",\n  // \"District Of Columbia\": \"DC\",\n  DC: \"DC\",\n  \"Federated States Of Micronesia\": \"FM\",\n  Florida: \"FL\",\n  Georgia: \"GA\",\n  Guam: \"GU\",\n  Hawaii: \"HI\",\n  Idaho: \"ID\",\n  Illinois: \"IL\",\n  Indiana: \"IN\",\n  Iowa: \"IA\",\n  Kansas: \"KS\",\n  Kentucky: \"KY\",\n  Louisiana: \"LA\",\n  Maine: \"ME\",\n  \"Marshall Islands\": \"MH\",\n  Maryland: \"MD\",\n  Massachusetts: \"MA\",\n  Michigan: \"MI\",\n  Minnesota: \"MN\",\n  Mississippi: \"MS\",\n  Missouri: \"MO\",\n  Montana: \"MT\",\n  Nebraska: \"NE\",\n  Nevada: \"NV\",\n  \"New Hampshire\": \"NH\",\n  \"New Jersey\": \"NJ\",\n  \"New Mexico\": \"NM\",\n  \"New York\": \"NY\",\n  \"North Carolina\": \"NC\",\n  \"North Dakota\": \"ND\",\n  \"Northern Mariana Islands\": \"MP\",\n  Ohio: \"OH\",\n  Oklahoma: \"OK\",\n  Oregon: \"OR\",\n  Palau: \"PW\",\n  Pennsylvania: \"PA\",\n  \"Puerto Rico\": \"PR\",\n  \"Rhode Island\": \"RI\",\n  \"South Carolina\": \"SC\",\n  \"South Dakota\": \"SD\",\n  Tennessee: \"TN\",\n  Texas: \"TX\",\n  Utah: \"UT\",\n  Vermont: \"VT\",\n  \"Virgin Islands\": \"VI\",\n  Virginia: \"VA\",\n  Washington: \"WA\",\n  \"West Virginia\": \"WV\",\n  Wisconsin: \"WI\",\n  Wyoming: \"WY\",\n};\n\nconst abToStateUnfiltered = invert(stateToAbUnfiltered);\nexport const stateAbs = timeline.map((d) => d.state);\n\nexport const abToState = {};\n// [\"US\", ...stateAbs].forEach((ab) => {\n//   abToState[ab] = abToStateUnfiltered[ab];\n// });\nstateAbs.forEach((ab) => {\n  abToState[ab] = abToStateUnfiltered[ab];\n});\n\nexport const stateToAb = invert(abToState);\n\nexport const stateToId = invert(idToState);\n\nexport const statesWithTotalBan = timeline\n  .filter((d) => d.hasTotalBan === \"Y\")\n  .map((d) => d.state);\n\nexport const statesWithTotalBanIN = timeline\n  .filter((d) => d.hasTotalBan === \"Y\" && d.state !== \"IN\")\n  .map((d) => d.state);\n\nexport const statesWithPolicyMoments = timeline\n  .filter((d) => d.point1_text !== null)\n  .map((d) => d.state);\n","import { parse } from \"date-fns\";\nimport data from \"./data_bar.json\";\nimport { stateAbs } from \"./states\";\n\nconst processedData = [];\n\nconst metrics = [\"nat05\", \"nat50\", \"nat95\", \"other\"];\n\nconst states = stateAbs;\n\ndata.forEach((d) => {\n  const date = parse(d.month, \"MMM d y\", new Date());\n\n  states.forEach((state) => {\n    const row = {\n      state,\n      date,\n    };\n\n    metrics.forEach((metric) => {\n      if (metric === \"other\") {\n        row[metric] = d[`${state}`];\n      } else {\n        row[metric] = d[`${metric}_${state}`];\n      }\n    });\n\n    processedData.push(row);\n  });\n});\n\nexport let dates;\ndates = processedData.filter((d) => d.state === \"US\").map((d) => d.date);\ndates = [...new Set(dates)];\n\nexport default processedData;\n","const PointIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"40\"\n      height=\"50\"\n      viewBox=\"0 0 40 50\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <path\n        d=\"M7.78083 0.171147C7.52836 0.273514 7.32295 0.465223 7.20436 0.709164C7.08576 0.953118 7.06244 1.23193 7.13889 1.49165L8.58531 6.86903C8.62094 7.00945 8.68438 7.1414 8.7718 7.2572C8.85924 7.37298 8.96903 7.47032 9.09481 7.54354C9.2205 7.61676 9.35962 7.6644 9.50417 7.68369C9.64871 7.70299 9.79568 7.69357 9.93652 7.65595C10.0775 7.61835 10.2095 7.55329 10.3249 7.46461C10.4404 7.37592 10.5371 7.26535 10.6092 7.13932C10.6813 7.01328 10.7275 6.87431 10.7451 6.73047C10.7627 6.58664 10.7514 6.44079 10.7118 6.30144L9.26534 0.924053C9.22808 0.771249 9.15806 0.628297 9.06008 0.504937C8.96208 0.381577 8.83839 0.280714 8.69745 0.209244C8.55652 0.137775 8.40169 0.0973665 8.24348 0.0907981C8.0853 0.0842297 7.92749 0.111627 7.78083 0.171147ZM0.877025 6.61054C0.675147 6.67612 0.496587 6.79828 0.362844 6.96228C0.229114 7.12627 0.145909 7.32511 0.123274 7.53481C0.10065 7.74454 0.139543 7.95618 0.235291 8.14423C0.331025 8.33233 0.479535 8.48873 0.662882 8.59469L5.24303 11.4561C5.36641 11.5323 5.50373 11.5836 5.64715 11.6071C5.79057 11.6306 5.93727 11.6256 6.0789 11.5928C6.22051 11.5598 6.35427 11.4997 6.47254 11.4154C6.59079 11.3312 6.69124 11.2248 6.76815 11.1022C6.84505 10.9794 6.89689 10.8429 6.92073 10.7005C6.94457 10.5579 6.93992 10.4122 6.90705 10.2716C6.87418 10.131 6.81375 9.99824 6.7292 9.88085C6.64463 9.76357 6.53761 9.66389 6.41423 9.58776L1.81747 6.73078C1.67976 6.64234 1.52385 6.58565 1.36113 6.56485C1.19841 6.54404 1.033 6.55966 0.877025 6.61054ZM17.1082 2.27816C16.8391 2.37077 16.6164 2.56327 16.4869 2.81523L13.94 7.57896C13.8015 7.83633 13.7714 8.13766 13.8564 8.41665C13.9416 8.69563 14.1347 8.92949 14.3936 9.06673C14.6525 9.20389 14.9557 9.23328 15.2368 9.14835C15.5178 9.06341 15.7536 8.87107 15.8921 8.61375L18.439 3.84996C18.5522 3.65537 18.6024 3.43098 18.5826 3.2073C18.5629 2.98361 18.4744 2.77148 18.329 2.59976C18.1836 2.42803 17.9885 2.30505 17.7701 2.2475C17.5515 2.18996 17.3204 2.20066 17.1082 2.27816ZM10.9603 10.3367C8.89568 10.8878 7.54908 12.9461 8.09438 14.9735L12.0698 29.753C11.3579 29.2856 10.5309 28.7179 9.88284 28.3743C9.21039 28.0181 8.53848 27.7378 7.80235 27.6567C7.06625 27.5758 6.27236 27.749 5.59166 28.1762C4.77528 28.6885 4.41582 29.5501 4.36411 30.4309C4.3124 31.3114 4.62319 32.3031 5.42732 32.9933C8.01984 35.2186 11.1135 38.6947 14.5477 41.414C17.9819 44.1336 21.9312 46.1969 26.144 45.0724L28.4532 44.456C34.301 42.8951 37.9029 37.1547 36.3337 31.3207L33.3166 20.1039C32.8058 18.2043 30.9853 16.8368 29.1008 17.3398C28.518 17.4954 28.0549 17.8429 27.6723 18.2515C26.8019 17.2616 25.5025 16.7091 24.1662 17.0658C23.4864 17.2473 22.9472 17.6621 22.5195 18.1594C21.5589 17.2113 20.1189 16.7672 18.7033 17.145C18.0852 17.3101 17.5808 17.6335 17.1241 18.0262L15.753 12.9292C15.2079 10.9018 13.025 9.78558 10.9603 10.3367ZM11.5283 12.4481C12.5263 12.1817 13.4075 12.682 13.6265 13.4969L17.1495 26.5939C17.1851 26.7344 17.2485 26.8663 17.3359 26.9821C17.4234 27.0978 17.5332 27.1952 17.6589 27.2684C17.7846 27.3416 17.9238 27.3892 18.0683 27.4085C18.2128 27.4279 18.3598 27.4184 18.5008 27.3807C18.6416 27.3432 18.7736 27.278 18.8892 27.1895C19.0045 27.1008 19.1012 26.9902 19.1733 26.8641C19.2454 26.7382 19.2917 26.5991 19.3092 26.4552C19.3269 26.3115 19.3155 26.1657 19.276 26.0263L17.9583 21.1272C17.9575 21.0982 17.9557 21.0692 17.9526 21.0403C17.8433 20.2913 18.3415 19.5044 19.2712 19.2564C20.2686 18.9901 21.148 19.4849 21.3694 20.3052L22.7482 25.3647C22.7838 25.5051 22.8473 25.637 22.9347 25.7528C23.0221 25.8686 23.1319 25.966 23.2577 26.0391C23.3834 26.1124 23.5226 26.16 23.6671 26.1794C23.8116 26.1986 23.9585 26.1891 24.0995 26.1516C24.2403 26.114 24.3725 26.0489 24.4878 25.9602C24.6034 25.8715 24.7 25.761 24.772 25.6349C24.8442 25.509 24.8905 25.3699 24.908 25.226C24.9257 25.0823 24.9144 24.9364 24.8747 24.7971L23.8021 20.8757C23.8006 20.8702 23.7992 20.8646 23.7977 20.8592C23.805 20.8056 23.8083 20.7514 23.8076 20.6974C23.7477 19.9318 24.1466 19.334 24.7341 19.1772C25.4066 18.9977 26.178 19.448 26.4215 20.3533L27.4509 24.1802C27.4865 24.3206 27.5499 24.4525 27.6373 24.5683C27.7249 24.6842 27.8345 24.7814 27.9603 24.8547C28.086 24.9278 28.2252 24.9756 28.3697 24.9949C28.5142 25.0141 28.6613 25.0046 28.8021 24.9671C28.9431 24.9295 29.0751 24.8644 29.1905 24.7757C29.306 24.6871 29.4026 24.5764 29.4747 24.4505C29.5469 24.3244 29.5931 24.1853 29.6108 24.0416C29.6283 23.8977 29.617 23.7519 29.5774 23.6125L28.8985 21.0888C28.9009 21.0418 28.9 20.9948 28.8962 20.948C28.8073 20.1399 29.1953 19.5776 29.6689 19.4511C30.2021 19.3088 30.9368 19.7292 31.1901 20.6716L34.2071 31.8882C35.4709 36.5865 32.6665 41.0685 27.8854 42.3446L25.5761 42.961C22.3537 43.8211 19.1378 42.2506 15.9217 39.7039C12.7054 37.1569 9.6571 33.729 6.86888 31.3358C6.62739 31.1284 6.53444 30.8492 6.55179 30.554C6.56912 30.2588 6.73664 30.0374 6.76425 30.02C7.05968 29.8346 7.26048 29.8063 7.57056 29.8402C7.88072 29.8743 8.31282 30.0236 8.85454 30.3106C9.93787 30.8847 11.3893 31.9539 13.2874 33.0877C13.4747 33.1991 13.6912 33.2527 13.9093 33.2413C14.1275 33.23 14.3376 33.1545 14.5126 33.0244C14.6876 32.8943 14.8198 32.7153 14.8922 32.5104C14.9647 32.3057 14.9743 32.0841 14.9195 31.8742L10.2208 14.4058C10.0017 13.5911 10.5303 12.7145 11.5283 12.4481Z\"\n        fill=\"#1E1C6F\"\n      />\n    </svg>\n  );\n};\n\nexport default PointIcon;\n","import PointIcon from \"./PointIcon\";\nimport { abToState } from \"@/data/states\";\nimport parse from 'html-react-parser';\n\nconst MissingData = ({state, placement}) => {\n  // See where ${abToState[state]} patients travel to obtain abortion care.\n  let text = placement == \"map\" ? \n    \"To view interstate travel data, please select a state from the dropdown menu.\"\n    // DM: Adds exception for DC since no data is currently available\n    : placement == \"slope\" && state == \"DC\" ?\n    `<strong>${abToState[state]}</strong> data are currently not available for this section. Please make another selection.`\n    // DM: Adds exception for Indiana since slope chart is not displaying even though data is available\n    : placement == \"slope\" && state == \"IN\" ?\n    `Estimates of change in out-of-state travel are not available for <strong>${abToState[state]}</strong> because abortion has been banned, with very limited exceptions, in that state since August 2023. <a href=#interstate-travel>See where <strong>${abToState[state]}</strong> patients travel to obtain abortion care.</a>`\n    // DM:adds exception for Missouri since we are not currently publishing estimates for that state\n    :placement == \"estimates\" && state == \"MO\" ?\n    `We are not currently publishing state-level estimates for <strong>${abToState[state]}</strong>. <a href=#interstate-travel>See where <strong>${abToState[state]}</strong> patients travel to obtain abortion care.</a>`\n    // DM: adds exception for North Dakota since we are not currently publishing estimates for that state\n    :placement == \"estimates\" && state == \"ND\" ?\n    `We are not currently publishing state-level estimates for <strong>${abToState[state]}</strong>. <a href=#interstate-travel>See where <strong>${abToState[state]}</strong> patients travel to obtain abortion care.</a>`\n    : placement == \"slope\" && state == \"US\" ? \n    \"To view change in out-of-state travel data, please select a state from the dropdown menu.\"\n    : placement == \"slope\" && state !== \"US\" ?\n    `Estimates of change in out-of-state travel are not available for <strong>${abToState[state]}</strong> because abortion has been banned, with very limited exceptions, in that state since <i>Roe</i> was overturned. <a href=#interstate-travel>See where <strong>${abToState[state]}</strong> patients travel to obtain abortion care.</a>`\n    : `Estimates of clinician-provided abortions are not available for <strong>${abToState[state]}</strong> because abortion has been banned, with very limited exceptions, in that state since <i>Roe</i> was overturned. <a href=#interstate-travel>See where <strong>${abToState[state]}</strong> patients travel to obtain abortion care.</a>`\n  return (\n    <div className=\"missing-overlay absolute left-0 z-10 bg-white/[.80] w-full h-full m-auto top-0\">\n        <div className=\"relative p-4 flex rounded-sm flex-col items-center max-w-[400px] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-[#e1fc67]/[.30] shadow-[0_8px_12px_-4px_rgba(0,0,0,0.03)]\">\n          <PointIcon className=\"size-10\" />\n          <p className=\"text-sm text-center text-new-navy\tp-4 md:text-md\">{parse(text)}</p>\n        </div>\n      </div>\n  )\n};\n\nexport default MissingData;","import data from \"./data_slope.json\";\nimport { stateAbs } from \"./states\";\n\nconst states = [\"border_statesborderingtotalbans\", ...stateAbs];\n\nconst processedData = [];\n\ndata.forEach((d) => {\n  const year = d.year;\n\n  states.forEach((state) => {\n    processedData.push({\n      state,\n      year,\n      proportion: d[`proportion_${state}`],\n      proportionBorder: d[`proportion_border_${state}`] * 100,\n    });\n  });\n});\n\nexport default processedData;\n","import _pt from \"prop-types\";\nvar _excluded = [\"top\", \"left\", \"transform\", \"className\", \"children\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Group(_ref) {\n  var _ref$top = _ref.top,\n    top = _ref$top === void 0 ? 0 : _ref$top,\n    _ref$left = _ref.left,\n    left = _ref$left === void 0 ? 0 : _ref$left,\n    transform = _ref.transform,\n    className = _ref.className,\n    children = _ref.children,\n    innerRef = _ref.innerRef,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(\"g\", _extends({\n    ref: innerRef,\n    className: cx('visx-group', className),\n    transform: transform || \"translate(\" + left + \", \" + top + \")\"\n  }, restProps), children);\n}\nGroup.propTypes = {\n  top: _pt.number,\n  left: _pt.number,\n  transform: _pt.string,\n  className: _pt.string,\n  children: _pt.node,\n  innerRef: _pt.oneOfType([_pt.string, _pt.func, _pt.object])\n};","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import { interpolateRgb, interpolateLab, interpolateHcl, interpolateHclLong, interpolateHsl, interpolateHslLong, interpolateCubehelix, interpolateCubehelixLong } from '@visx/vendor/d3-interpolate';\nvar interpolatorMap = {\n  lab: interpolateLab,\n  hcl: interpolateHcl,\n  'hcl-long': interpolateHclLong,\n  hsl: interpolateHsl,\n  'hsl-long': interpolateHslLong,\n  cubehelix: interpolateCubehelix,\n  'cubehelix-long': interpolateCubehelixLong,\n  rgb: interpolateRgb\n};\nexport default function createColorInterpolator(interpolate) {\n  switch (interpolate) {\n    case 'lab':\n    case 'hcl':\n    case 'hcl-long':\n    case 'hsl':\n    case 'hsl-long':\n    case 'cubehelix':\n    case 'cubehelix-long':\n    case 'rgb':\n      return interpolatorMap[interpolate];\n    default:\n  }\n  var type = interpolate.type,\n    gamma = interpolate.gamma;\n  var interpolator = interpolatorMap[type];\n  return typeof gamma === 'undefined' ? interpolator : interpolator.gamma(gamma);\n}","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","var TEST_TIME = new Date(Date.UTC(2020, 1, 2, 3, 4, 5));\nvar TEST_FORMAT = '%Y-%m-%d %H:%M';\n\n/**\n * Check if the scale is UTC or Time scale\n * When local time is equal to UTC, always return true\n * @param scale time or utc scale\n */\nexport default function isUtcScale(scale) {\n  // The only difference between time and utc scale is\n  // whether the tick format function is utcFormat or timeFormat\n  var output = scale.tickFormat(1, TEST_FORMAT)(TEST_TIME);\n  return output === '2020-02-02 03:04';\n}","import { timeSecond, timeMinute, timeHour, timeDay, timeYear, timeMonth, timeWeek, utcSecond, utcMinute, utcHour, utcDay, utcWeek, utcMonth, utcYear } from '@visx/vendor/d3-time';\nimport isUtcScale from '../utils/isUtcScale';\nvar localTimeIntervals = {\n  day: timeDay,\n  hour: timeHour,\n  minute: timeMinute,\n  month: timeMonth,\n  second: timeSecond,\n  week: timeWeek,\n  year: timeYear\n};\nvar utcIntervals = {\n  day: utcDay,\n  hour: utcHour,\n  minute: utcMinute,\n  month: utcMonth,\n  second: utcSecond,\n  week: utcWeek,\n  year: utcYear\n};\nexport default function applyNice(scale, config) {\n  if ('nice' in config && typeof config.nice !== 'undefined' && 'nice' in scale) {\n    var nice = config.nice;\n    if (typeof nice === 'boolean') {\n      if (nice) {\n        scale.nice();\n      }\n    } else if (typeof nice === 'number') {\n      scale.nice(nice);\n    } else {\n      var timeScale = scale;\n      var isUtc = isUtcScale(timeScale);\n      if (typeof nice === 'string') {\n        timeScale.nice(isUtc ? utcIntervals[nice] : localTimeIntervals[nice]);\n      } else {\n        var interval = nice.interval,\n          step = nice.step;\n        var parsedInterval = (isUtc ? utcIntervals[interval] : localTimeIntervals[interval]).every(step);\n        if (parsedInterval != null) {\n          timeScale.nice(parsedInterval);\n        }\n      }\n    }\n  }\n}","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","import domain from './domain';\nimport range from './range';\nimport align from './align';\nimport base from './base';\nimport clamp from './clamp';\nimport constant from './constant';\nimport exponent from './exponent';\nimport interpolate from './interpolate';\nimport nice from './nice';\nimport padding from './padding';\nimport reverse from './reverse';\nimport round from './round';\nimport unknown from './unknown';\nimport zero from './zero';\n\n/**\n * List of all operators, in order of execution\n */\nexport var ALL_OPERATORS = [\n// domain => nice => zero\n'domain', 'nice', 'zero',\n// interpolate before round\n'interpolate', 'round',\n// set range then reverse\n'range', 'reverse',\n// Order does not matter for these operators\n'align', 'base', 'clamp', 'constant', 'exponent', 'padding', 'unknown'];\n// Use Record to enforce that all keys in OperatorType must exist.\nvar operators = {\n  domain: domain,\n  nice: nice,\n  zero: zero,\n  interpolate: interpolate,\n  round: round,\n  align: align,\n  base: base,\n  clamp: clamp,\n  constant: constant,\n  exponent: exponent,\n  padding: padding,\n  range: range,\n  reverse: reverse,\n  unknown: unknown\n};\nexport default function scaleOperator() {\n  for (var _len = arguments.length, ops = new Array(_len), _key = 0; _key < _len; _key++) {\n    ops[_key] = arguments[_key];\n  }\n  var selection = new Set(ops);\n  var selectedOps = ALL_OPERATORS.filter(function (o) {\n    return selection.has(o);\n  });\n  return function applyOperators(scale, config) {\n    if (typeof config !== 'undefined') {\n      selectedOps.forEach(function (op) {\n        operators[op](scale, config);\n      });\n    }\n    return scale;\n  };\n}","export default function applyDomain(scale, config) {\n  if (config.domain) {\n    if ('nice' in scale || 'quantiles' in scale) {\n      // continuous input scales\n      scale.domain(config.domain);\n    } else if ('padding' in scale) {\n      // point and band scales\n      scale.domain(config.domain);\n    } else {\n      // ordinal and threshold scale\n      scale.domain(config.domain);\n    }\n  }\n}","export default function applyZero(scale, config) {\n  if ('zero' in config && config.zero === true) {\n    var domain = scale.domain();\n    var a = domain[0],\n      b = domain[1];\n    var isDescending = b < a;\n    var _ref = isDescending ? [b, a] : [a, b],\n      min = _ref[0],\n      max = _ref[1];\n    var domainWithZero = [Math.min(0, min), Math.max(0, max)];\n    scale.domain(isDescending ? domainWithZero.reverse() : domainWithZero);\n  }\n}","import createColorInterpolator from '../utils/createColorInterpolator';\nexport default function applyInterpolate(scale, config) {\n  if ('interpolate' in config && 'interpolate' in scale && typeof config.interpolate !== 'undefined') {\n    var interpolator = createColorInterpolator(config.interpolate);\n    scale.interpolate(interpolator);\n  }\n}","import { interpolateRound } from '@visx/vendor/d3-interpolate';\nexport default function applyRound(scale, config) {\n  if ('round' in config && typeof config.round !== 'undefined') {\n    if (config.round && 'interpolate' in config && typeof config.interpolate !== 'undefined') {\n      console.warn(\"[visx/scale/applyRound] ignoring round: scale config contains round and interpolate. only applying interpolate. config:\", config);\n    } else if ('round' in scale) {\n      // for point and band scales\n      scale.round(config.round);\n    } else if ('interpolate' in scale && config.round) {\n      // for continuous output scales\n      // setting config.round = true\n      // is actually setting interpolator to interpolateRound\n      // as these scales do not have scale.round() function\n      scale.interpolate(interpolateRound);\n    }\n  }\n}","export default function applyAlign(scale, config) {\n  if ('align' in scale && 'align' in config && typeof config.align !== 'undefined') {\n    scale.align(config.align);\n  }\n}","export default function applyBase(scale, config) {\n  if ('base' in scale && 'base' in config && typeof config.base !== 'undefined') {\n    scale.base(config.base);\n  }\n}","export default function applyClamp(scale, config) {\n  if ('clamp' in scale && 'clamp' in config && typeof config.clamp !== 'undefined') {\n    scale.clamp(config.clamp);\n  }\n}","export default function applyConstant(scale, config) {\n  if ('constant' in scale && 'constant' in config && typeof config.constant !== 'undefined') {\n    scale.constant(config.constant);\n  }\n}","export default function applyExponent(scale, config) {\n  if ('exponent' in scale && 'exponent' in config && typeof config.exponent !== 'undefined') {\n    scale.exponent(config.exponent);\n  }\n}","export default function applyPadding(scale, config) {\n  if ('padding' in scale && 'padding' in config && typeof config.padding !== 'undefined') {\n    scale.padding(config.padding);\n  }\n  if ('paddingInner' in scale && 'paddingInner' in config && typeof config.paddingInner !== 'undefined') {\n    scale.paddingInner(config.paddingInner);\n  }\n  if ('paddingOuter' in scale && 'paddingOuter' in config && typeof config.paddingOuter !== 'undefined') {\n    scale.paddingOuter(config.paddingOuter);\n  }\n}","export default function applyRange(scale, config) {\n  if (config.range) {\n    if ('padding' in scale) {\n      // point and band scales\n      scale.range(config.range);\n    } else {\n      // the rest\n      scale.range(config.range);\n    }\n  }\n}","export default function applyReverse(scale, config) {\n  if (config.reverse) {\n    var reversedRange = scale.range().slice().reverse();\n    if ('padding' in scale) {\n      // point and band scales\n      scale.range(reversedRange);\n    } else {\n      // the rest\n      scale.range(reversedRange);\n    }\n  }\n}","export default function applyUnknown(scale, config) {\n  if ('unknown' in scale && 'unknown' in config && typeof config.unknown !== 'undefined') {\n    scale.unknown(config.unknown);\n  }\n}","import { scalePoint } from '@visx/vendor/d3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updatePointScale = scaleOperator('domain', 'range', 'reverse', 'align', 'padding', 'round');\nexport default function createPointScale(config) {\n  return updatePointScale(scalePoint(), config);\n}","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n    if (r0 * step < start) ++r0;\n    if (r1 * step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) * step;\n  } else {\n    step = -step;\n    let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n    if (r0 / step < start) ++r0;\n    if (r1 / step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import { scaleLinear } from '@visx/vendor/d3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateLinearScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round', 'zero');\nexport default function createLinearScale(config) {\n  return updateLinearScale(scaleLinear(), config);\n}","import { useState, useRef, useEffect, useMemo } from 'react';\nimport createDebounce from 'debounce';\n\nfunction useMeasure(_temp) {\n  let {\n    debounce,\n    scroll,\n    polyfill,\n    offsetSize\n  } = _temp === void 0 ? {\n    debounce: 0,\n    scroll: false,\n    offsetSize: false\n  } : _temp;\n  const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);\n\n  if (!ResizeObserver) {\n    throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');\n  }\n\n  const [bounds, set] = useState({\n    left: 0,\n    top: 0,\n    width: 0,\n    height: 0,\n    bottom: 0,\n    right: 0,\n    x: 0,\n    y: 0\n  }); // keep all state in a ref\n\n  const state = useRef({\n    element: null,\n    scrollContainers: null,\n    resizeObserver: null,\n    lastBounds: bounds\n  }); // set actual debounce values early, so effects know if they should react accordingly\n\n  const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;\n  const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted\n\n  const mounted = useRef(false);\n  useEffect(() => {\n    mounted.current = true;\n    return () => void (mounted.current = false);\n  }); // memoize handlers, so event-listeners know when they should update\n\n  const [forceRefresh, resizeChange, scrollChange] = useMemo(() => {\n    const callback = () => {\n      if (!state.current.element) return;\n      const {\n        left,\n        top,\n        width,\n        height,\n        bottom,\n        right,\n        x,\n        y\n      } = state.current.element.getBoundingClientRect();\n      const size = {\n        left,\n        top,\n        width,\n        height,\n        bottom,\n        right,\n        x,\n        y\n      };\n\n      if (state.current.element instanceof HTMLElement && offsetSize) {\n        size.height = state.current.element.offsetHeight;\n        size.width = state.current.element.offsetWidth;\n      }\n\n      Object.freeze(size);\n      if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);\n    };\n\n    return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];\n  }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers\n\n  function removeListeners() {\n    if (state.current.scrollContainers) {\n      state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));\n      state.current.scrollContainers = null;\n    }\n\n    if (state.current.resizeObserver) {\n      state.current.resizeObserver.disconnect();\n      state.current.resizeObserver = null;\n    }\n  } // add scroll-listeners / observers\n\n\n  function addListeners() {\n    if (!state.current.element) return;\n    state.current.resizeObserver = new ResizeObserver(scrollChange);\n    state.current.resizeObserver.observe(state.current.element);\n\n    if (scroll && state.current.scrollContainers) {\n      state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {\n        capture: true,\n        passive: true\n      }));\n    }\n  } // the ref we expose to the user\n\n\n  const ref = node => {\n    if (!node || node === state.current.element) return;\n    removeListeners();\n    state.current.element = node;\n    state.current.scrollContainers = findScrollContainers(node);\n    addListeners();\n  }; // add general event listeners\n\n\n  useOnWindowScroll(scrollChange, Boolean(scroll));\n  useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners\n\n  useEffect(() => {\n    removeListeners();\n    addListeners();\n  }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts\n\n  useEffect(() => removeListeners, []);\n  return [ref, bounds, forceRefresh];\n} // Adds native resize listener to window\n\n\nfunction useOnWindowResize(onWindowResize) {\n  useEffect(() => {\n    const cb = onWindowResize;\n    window.addEventListener('resize', cb);\n    return () => void window.removeEventListener('resize', cb);\n  }, [onWindowResize]);\n}\n\nfunction useOnWindowScroll(onScroll, enabled) {\n  useEffect(() => {\n    if (enabled) {\n      const cb = onScroll;\n      window.addEventListener('scroll', cb, {\n        capture: true,\n        passive: true\n      });\n      return () => void window.removeEventListener('scroll', cb, true);\n    }\n  }, [onScroll, enabled]);\n} // Returns a list of scroll offsets\n\n\nfunction findScrollContainers(element) {\n  const result = [];\n  if (!element || element === document.body) return result;\n  const {\n    overflow,\n    overflowX,\n    overflowY\n  } = window.getComputedStyle(element);\n  if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);\n  return [...result, ...findScrollContainers(element.parentElement)];\n} // Checks if element boundaries are equal\n\n\nconst keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];\n\nconst areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);\n\nexport { useMeasure as default };\n","export default function identity(x) {\n  return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n","export default function getTicks(scale, numTicks) {\n  // Because `Scale` is generic type which maybe a subset of AnyD3Scale\n  // that may not have `ticks` field,\n  // TypeScript will not let us do the `'ticks' in scale` check directly.\n  // Have to manually cast and expand type first.\n  var s = scale;\n  if ('ticks' in s) {\n    return s.ticks(numTicks);\n  }\n  return s.domain().filter(function (_, index, arr) {\n    return numTicks == null || arr.length <= numTicks || index % Math.round((arr.length - 1) / numTicks) === 0;\n  });\n}","export default function coerceNumber(val) {\n  if ((typeof val === 'function' || typeof val === 'object' && !!val) && 'valueOf' in val) {\n    var num = val.valueOf();\n    if (typeof num === 'number') return num;\n  }\n  return val;\n}","var _excluded = [\"from\", \"to\", \"fill\", \"className\", \"innerRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Line(_ref) {\n  var _ref$from = _ref.from,\n    from = _ref$from === void 0 ? {\n      x: 0,\n      y: 0\n    } : _ref$from,\n    _ref$to = _ref.to,\n    to = _ref$to === void 0 ? {\n      x: 1,\n      y: 1\n    } : _ref$to,\n    _ref$fill = _ref.fill,\n    fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n    className = _ref.className,\n    innerRef = _ref.innerRef,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var isRectilinear = from.x === to.x || from.y === to.y;\n  return /*#__PURE__*/React.createElement(\"line\", _extends({\n    ref: innerRef,\n    className: cx('visx-line', className),\n    x1: from.x,\n    y1: from.y,\n    x2: to.x,\n    y2: to.y,\n    fill: fill,\n    shapeRendering: isRectilinear ? 'crispEdges' : 'auto'\n  }, restProps));\n}","import memoize from 'lodash/memoize';\nvar MEASUREMENT_ELEMENT_ID = '__react_svg_text_measurement_id';\nfunction getStringWidth(str, style) {\n  try {\n    // Calculate length of each word to be used to determine number of words per line\n    var textEl = document.getElementById(MEASUREMENT_ELEMENT_ID);\n    if (!textEl) {\n      var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n      svg.setAttribute('aria-hidden', 'true');\n      svg.style.width = '0';\n      svg.style.height = '0';\n      svg.style.position = 'absolute';\n      svg.style.top = '-100%';\n      svg.style.left = '-100%';\n      textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n      textEl.setAttribute('id', MEASUREMENT_ELEMENT_ID);\n      svg.appendChild(textEl);\n      document.body.appendChild(svg);\n    }\n    Object.assign(textEl.style, style);\n    textEl.textContent = str;\n    return textEl.getComputedTextLength();\n  } catch (e) {\n    return null;\n  }\n}\nexport default memoize(getStringWidth, function (str, style) {\n  return str + \"_\" + JSON.stringify(style);\n});","var _excluded = [\"verticalAnchor\", \"scaleToFit\", \"angle\", \"width\", \"lineHeight\", \"capHeight\", \"children\", \"style\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { useMemo } from 'react';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport getStringWidth from '../util/getStringWidth';\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\nfunction isXOrYInValid(xOrY) {\n  return (\n    // number that is not NaN or Infinity\n    typeof xOrY === 'number' && Number.isFinite(xOrY) ||\n    // for percentage\n    typeof xOrY === 'string'\n  );\n}\nexport default function useText(props) {\n  var _props$verticalAnchor = props.verticalAnchor,\n    verticalAnchor = _props$verticalAnchor === void 0 ? 'end' : _props$verticalAnchor,\n    _props$scaleToFit = props.scaleToFit,\n    scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n    angle = props.angle,\n    width = props.width,\n    _props$lineHeight = props.lineHeight,\n    lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n    _props$capHeight = props.capHeight,\n    capHeight = _props$capHeight === void 0 ? '0.71em' : _props$capHeight,\n    children = props.children,\n    style = props.style,\n    textProps = _objectWithoutPropertiesLoose(props, _excluded);\n  var _textProps$x = textProps.x,\n    x = _textProps$x === void 0 ? 0 : _textProps$x,\n    _textProps$y = textProps.y,\n    y = _textProps$y === void 0 ? 0 : _textProps$y;\n  var isXOrYNotValid = !isXOrYInValid(x) || !isXOrYInValid(y);\n  var _useMemo = useMemo(function () {\n      var words = children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/);\n      return {\n        wordsWithWidth: words.map(function (word) {\n          return {\n            word: word,\n            wordWidth: getStringWidth(word, style) || 0\n          };\n        }),\n        spaceWidth: getStringWidth(\"\\xA0\", style) || 0\n      };\n    }, [children, style]),\n    wordsWithWidth = _useMemo.wordsWithWidth,\n    spaceWidth = _useMemo.spaceWidth;\n  var wordsByLines = useMemo(function () {\n    if (isXOrYNotValid) {\n      return [];\n    }\n\n    // Only perform calculations if using features that require them (multiline, scaleToFit)\n    if (width || scaleToFit) {\n      return wordsWithWidth.reduce(function (result, _ref) {\n        var word = _ref.word,\n          wordWidth = _ref.wordWidth;\n        var currentLine = result[result.length - 1];\n        if (currentLine && (width == null || scaleToFit || (currentLine.width || 0) + wordWidth + spaceWidth < width)) {\n          // Word can be added to an existing line\n          currentLine.words.push(word);\n          currentLine.width = currentLine.width || 0;\n          currentLine.width += wordWidth + spaceWidth;\n        } else {\n          // Add first word to line or word is too long to scaleToFit on existing line\n          var newLine = {\n            words: [word],\n            width: wordWidth\n          };\n          result.push(newLine);\n        }\n        return result;\n      }, []);\n    }\n    return [{\n      words: children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/)\n    }];\n  }, [isXOrYNotValid, width, scaleToFit, children, wordsWithWidth, spaceWidth]);\n  var startDy = useMemo(function () {\n    var startDyStr = isXOrYNotValid ? '' : verticalAnchor === 'start' ? reduceCSSCalc(\"calc(\" + capHeight + \")\") : verticalAnchor === 'middle' ? reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) / 2 + \" * -\" + lineHeight + \" + (\" + capHeight + \" / 2))\") : reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) + \" * -\" + lineHeight + \")\");\n    return startDyStr;\n  }, [isXOrYNotValid, verticalAnchor, capHeight, wordsByLines.length, lineHeight]);\n  var transform = useMemo(function () {\n    var transforms = [];\n    if (isXOrYNotValid) {\n      return '';\n    }\n    if (isNumber(x) && isNumber(y) && isNumber(width) && scaleToFit && wordsByLines.length > 0) {\n      var lineWidth = wordsByLines[0].width || 1;\n      var sx = scaleToFit === 'shrink-only' ? Math.min(width / lineWidth, 1) : width / lineWidth;\n      var sy = sx;\n      var originX = x - sx * x;\n      var originY = y - sy * y;\n      transforms.push(\"matrix(\" + sx + \", 0, 0, \" + sy + \", \" + originX + \", \" + originY + \")\");\n    }\n    if (angle) {\n      transforms.push(\"rotate(\" + angle + \", \" + x + \", \" + y + \")\");\n    }\n    return transforms.length > 0 ? transforms.join(' ') : '';\n  }, [isXOrYNotValid, x, y, width, scaleToFit, wordsByLines, angle]);\n  return {\n    wordsByLines: wordsByLines,\n    startDy: startDy,\n    transform: transform\n  };\n}","var _excluded = [\"dx\", \"dy\", \"textAnchor\", \"innerRef\", \"innerTextRef\", \"verticalAnchor\", \"angle\", \"lineHeight\", \"scaleToFit\", \"capHeight\", \"width\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport useText from './hooks/useText';\nvar SVG_STYLE = {\n  overflow: 'visible'\n};\nexport default function Text(props) {\n  var _props$dx = props.dx,\n    dx = _props$dx === void 0 ? 0 : _props$dx,\n    _props$dy = props.dy,\n    dy = _props$dy === void 0 ? 0 : _props$dy,\n    _props$textAnchor = props.textAnchor,\n    textAnchor = _props$textAnchor === void 0 ? 'start' : _props$textAnchor,\n    innerRef = props.innerRef,\n    innerTextRef = props.innerTextRef,\n    verticalAnchor = props.verticalAnchor,\n    angle = props.angle,\n    _props$lineHeight = props.lineHeight,\n    lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n    _props$scaleToFit = props.scaleToFit,\n    scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n    capHeight = props.capHeight,\n    width = props.width,\n    textProps = _objectWithoutPropertiesLoose(props, _excluded);\n  var _textProps$x = textProps.x,\n    x = _textProps$x === void 0 ? 0 : _textProps$x,\n    fontSize = textProps.fontSize;\n  var _useText = useText(props),\n    wordsByLines = _useText.wordsByLines,\n    startDy = _useText.startDy,\n    transform = _useText.transform;\n  return /*#__PURE__*/React.createElement(\"svg\", {\n    ref: innerRef,\n    x: dx,\n    y: dy,\n    fontSize: fontSize,\n    style: SVG_STYLE\n  }, wordsByLines.length > 0 ? /*#__PURE__*/React.createElement(\"text\", _extends({\n    ref: innerTextRef,\n    transform: transform\n  }, textProps, {\n    textAnchor: textAnchor\n  }), wordsByLines.map(function (line, index) {\n    return /*#__PURE__*/React.createElement(\"tspan\", {\n      key: index,\n      x: x,\n      dy: index === 0 ? startDy : lineHeight\n    }, line.words.join(' '));\n  })) : null);\n}","var Orientation = {\n  top: 'top',\n  left: 'left',\n  right: 'right',\n  bottom: 'bottom'\n};\nexport default Orientation;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Group } from '@visx/group';\nimport { Text } from '@visx/text';\nimport Orientation from '../constants/orientation';\nexport default function Ticks(_ref) {\n  var hideTicks = _ref.hideTicks,\n    horizontal = _ref.horizontal,\n    orientation = _ref.orientation,\n    tickClassName = _ref.tickClassName,\n    tickComponent = _ref.tickComponent,\n    allTickLabelProps = _ref.tickLabelProps,\n    _ref$tickStroke = _ref.tickStroke,\n    tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n    tickTransform = _ref.tickTransform,\n    ticks = _ref.ticks,\n    strokeWidth = _ref.strokeWidth,\n    tickLineProps = _ref.tickLineProps;\n  return ticks.map(function (_ref2) {\n    var _allTickLabelProps$in;\n    var value = _ref2.value,\n      index = _ref2.index,\n      from = _ref2.from,\n      to = _ref2.to,\n      formattedValue = _ref2.formattedValue;\n    var tickLabelProps = (_allTickLabelProps$in = allTickLabelProps[index]) != null ? _allTickLabelProps$in : {};\n    var tickLabelFontSize = Math.max(10, typeof tickLabelProps.fontSize === 'number' && tickLabelProps.fontSize || 0);\n    var tickYCoord = to.y + (horizontal && orientation !== Orientation.top ? tickLabelFontSize : 0);\n    return /*#__PURE__*/React.createElement(Group, {\n      key: \"visx-tick-\" + value + \"-\" + index,\n      className: cx('visx-axis-tick', tickClassName),\n      transform: tickTransform\n    }, !hideTicks && /*#__PURE__*/React.createElement(Line, _extends({\n      from: from,\n      to: to,\n      stroke: tickStroke,\n      strokeWidth: strokeWidth,\n      strokeLinecap: \"square\"\n    }, tickLineProps)), tickComponent ? tickComponent(_extends({}, tickLabelProps, {\n      x: to.x,\n      y: tickYCoord,\n      formattedValue: formattedValue\n    })) : /*#__PURE__*/React.createElement(Text, _extends({\n      x: to.x,\n      y: tickYCoord\n    }, tickLabelProps), formattedValue));\n  });\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Text } from '@visx/text';\nimport getLabelTransform from '../utils/getLabelTransform';\nimport Orientation from '../constants/orientation';\nimport Ticks from './Ticks';\nvar defaultTextProps = {\n  textAnchor: 'middle',\n  fontFamily: 'Arial',\n  fontSize: 10,\n  fill: '#222'\n};\nexport default function AxisRenderer(_ref) {\n  var axisFromPoint = _ref.axisFromPoint,\n    axisLineClassName = _ref.axisLineClassName,\n    axisToPoint = _ref.axisToPoint,\n    hideAxisLine = _ref.hideAxisLine,\n    hideTicks = _ref.hideTicks,\n    horizontal = _ref.horizontal,\n    _ref$label = _ref.label,\n    label = _ref$label === void 0 ? '' : _ref$label,\n    labelClassName = _ref.labelClassName,\n    _ref$labelOffset = _ref.labelOffset,\n    labelOffset = _ref$labelOffset === void 0 ? 14 : _ref$labelOffset,\n    labelProps = _ref.labelProps,\n    _ref$orientation = _ref.orientation,\n    orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n    scale = _ref.scale,\n    _ref$stroke = _ref.stroke,\n    stroke = _ref$stroke === void 0 ? '#222' : _ref$stroke,\n    strokeDasharray = _ref.strokeDasharray,\n    _ref$strokeWidth = _ref.strokeWidth,\n    strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n    tickClassName = _ref.tickClassName,\n    tickComponent = _ref.tickComponent,\n    tickLineProps = _ref.tickLineProps,\n    tickLabelProps = _ref.tickLabelProps,\n    _ref$tickLength = _ref.tickLength,\n    tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n    _ref$tickStroke = _ref.tickStroke,\n    tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n    tickTransform = _ref.tickTransform,\n    ticks = _ref.ticks,\n    _ref$ticksComponent = _ref.ticksComponent,\n    ticksComponent = _ref$ticksComponent === void 0 ? Ticks : _ref$ticksComponent;\n  var combinedLabelProps = _extends({}, defaultTextProps, labelProps);\n  var tickLabelPropsDefault = _extends({}, defaultTextProps, typeof tickLabelProps === 'object' ? tickLabelProps : null);\n  // compute the max tick label size to compute label offset\n  var allTickLabelProps = ticks.map(function (_ref2) {\n    var value = _ref2.value,\n      index = _ref2.index;\n    return typeof tickLabelProps === 'function' ? tickLabelProps(value, index, ticks) : tickLabelPropsDefault;\n  });\n  var maxTickLabelFontSize = Math.max.apply(Math, [10].concat(allTickLabelProps.map(function (props) {\n    return typeof props.fontSize === 'number' ? props.fontSize : 0;\n  })));\n  return /*#__PURE__*/React.createElement(React.Fragment, null, ticksComponent({\n    hideTicks: hideTicks,\n    horizontal: horizontal,\n    orientation: orientation,\n    scale: scale,\n    tickClassName: tickClassName,\n    tickComponent: tickComponent,\n    tickLabelProps: allTickLabelProps,\n    tickStroke: tickStroke,\n    tickTransform: tickTransform,\n    ticks: ticks,\n    strokeWidth: strokeWidth,\n    tickLineProps: tickLineProps\n  }), !hideAxisLine && /*#__PURE__*/React.createElement(Line, {\n    className: cx('visx-axis-line', axisLineClassName),\n    from: axisFromPoint,\n    to: axisToPoint,\n    stroke: stroke,\n    strokeWidth: strokeWidth,\n    strokeDasharray: strokeDasharray\n  }), label && /*#__PURE__*/React.createElement(Text, _extends({\n    className: cx('visx-axis-label', labelClassName)\n  }, getLabelTransform({\n    labelOffset: labelOffset,\n    labelProps: combinedLabelProps,\n    orientation: orientation,\n    range: scale.range(),\n    tickLabelFontSize: maxTickLabelFontSize,\n    tickLength: tickLength\n  }), combinedLabelProps), label));\n}","import Orientation from '../constants/orientation';\nexport default function getLabelTransform(_ref) {\n  var labelOffset = _ref.labelOffset,\n    labelProps = _ref.labelProps,\n    orientation = _ref.orientation,\n    range = _ref.range,\n    tickLabelFontSize = _ref.tickLabelFontSize,\n    tickLength = _ref.tickLength;\n  var sign = orientation === Orientation.left || orientation === Orientation.top ? -1 : 1;\n  var x;\n  var y;\n  var transform;\n  if (orientation === Orientation.top || orientation === Orientation.bottom) {\n    var yBottomOffset = orientation === Orientation.bottom && typeof labelProps.fontSize === 'number' ? labelProps.fontSize : 0;\n    x = (Number(range[0]) + Number(range[range.length - 1])) / 2;\n    y = sign * (tickLength + labelOffset + tickLabelFontSize + yBottomOffset);\n  } else {\n    x = sign * ((Number(range[0]) + Number(range[range.length - 1])) / 2);\n    y = -(tickLength + labelOffset);\n    transform = \"rotate(\" + sign * 90 + \")\";\n  }\n  return {\n    x: x,\n    y: y,\n    transform: transform\n  };\n}","export default function toString(x) {\n  return x == null ? void 0 : x.toString();\n}","var Point = /*#__PURE__*/function () {\n  function Point(_ref) {\n    var _ref$x = _ref.x,\n      x = _ref$x === void 0 ? 0 : _ref$x,\n      _ref$y = _ref.y,\n      y = _ref$y === void 0 ? 0 : _ref$y;\n    this.x = 0;\n    this.y = 0;\n    this.x = x;\n    this.y = y;\n  }\n  var _proto = Point.prototype;\n  _proto.value = function value() {\n    return {\n      x: this.x,\n      y: this.y\n    };\n  };\n  _proto.toArray = function toArray() {\n    return [this.x, this.y];\n  };\n  return Point;\n}();\nexport { Point as default };","import { Point } from '@visx/point';\nexport default function createPoint(_ref, horizontal) {\n  var x = _ref.x,\n    y = _ref.y;\n  return new Point(horizontal ? {\n    x: x,\n    y: y\n  } : {\n    x: y,\n    y: x\n  });\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nexport var defaultAxisRangePadding = 0;\nexport default function getAxisRangePaddingConfig(originalRangePadding) {\n  if (originalRangePadding === void 0) {\n    originalRangePadding = defaultAxisRangePadding;\n  }\n  return typeof originalRangePadding === 'number' ? {\n    start: originalRangePadding,\n    end: originalRangePadding\n  } : _extends({\n    start: defaultAxisRangePadding,\n    end: defaultAxisRangePadding\n  }, originalRangePadding);\n}","import _pt from \"prop-types\";\nvar _excluded = [\"children\", \"axisClassName\", \"hideAxisLine\", \"hideTicks\", \"hideZero\", \"innerRef\", \"left\", \"numTicks\", \"orientation\", \"rangePadding\", \"scale\", \"tickFormat\", \"tickLength\", \"tickValues\", \"top\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport { Group } from '@visx/group';\nimport { getTicks, coerceNumber } from '@visx/scale';\nimport AxisRenderer from './AxisRenderer';\nimport getTickPosition from '../utils/getTickPosition';\nimport getTickFormatter from '../utils/getTickFormatter';\nimport createPoint from '../utils/createPoint';\nimport Orientation from '../constants/orientation';\nimport getAxisRangePaddingConfig from '../utils/getAxisRangePaddingConfig';\nexport default function Axis(_ref) {\n  var _ref$children = _ref.children,\n    children = _ref$children === void 0 ? AxisRenderer : _ref$children,\n    axisClassName = _ref.axisClassName,\n    _ref$hideAxisLine = _ref.hideAxisLine,\n    hideAxisLine = _ref$hideAxisLine === void 0 ? false : _ref$hideAxisLine,\n    _ref$hideTicks = _ref.hideTicks,\n    hideTicks = _ref$hideTicks === void 0 ? false : _ref$hideTicks,\n    _ref$hideZero = _ref.hideZero,\n    hideZero = _ref$hideZero === void 0 ? false : _ref$hideZero,\n    innerRef = _ref.innerRef,\n    _ref$left = _ref.left,\n    left = _ref$left === void 0 ? 0 : _ref$left,\n    _ref$numTicks = _ref.numTicks,\n    numTicks = _ref$numTicks === void 0 ? 10 : _ref$numTicks,\n    _ref$orientation = _ref.orientation,\n    orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n    _ref$rangePadding = _ref.rangePadding,\n    rangePadding = _ref$rangePadding === void 0 ? 0 : _ref$rangePadding,\n    scale = _ref.scale,\n    tickFormat = _ref.tickFormat,\n    _ref$tickLength = _ref.tickLength,\n    tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n    tickValues = _ref.tickValues,\n    _ref$top = _ref.top,\n    top = _ref$top === void 0 ? 0 : _ref$top,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var format = tickFormat != null ? tickFormat : getTickFormatter(scale);\n  var isLeft = orientation === Orientation.left;\n  var isTop = orientation === Orientation.top;\n  var horizontal = isTop || orientation === Orientation.bottom;\n  var tickPosition = getTickPosition(scale);\n  var tickSign = isLeft || isTop ? -1 : 1;\n  var range = scale.range();\n  var rangePaddingConfig = getAxisRangePaddingConfig(rangePadding);\n  var axisFromPoint = createPoint({\n    x: Number(range[0]) + 0.5 - rangePaddingConfig.start,\n    y: 0\n  }, horizontal);\n  var axisToPoint = createPoint({\n    x: Number(range[range.length - 1]) + 0.5 + rangePaddingConfig.end,\n    y: 0\n  }, horizontal);\n  var filteredTickValues = (tickValues != null ? tickValues : getTicks(scale, numTicks)).filter(function (value) {\n    return !hideZero || value !== 0 && value !== '0';\n  }).map(function (value, index) {\n    return {\n      value: value,\n      index: index\n    };\n  });\n  var ticks = filteredTickValues.map(function (_ref2) {\n    var value = _ref2.value,\n      index = _ref2.index;\n    var scaledValue = coerceNumber(tickPosition(value));\n    return {\n      value: value,\n      index: index,\n      from: createPoint({\n        x: scaledValue,\n        y: 0\n      }, horizontal),\n      to: createPoint({\n        x: scaledValue,\n        y: tickLength * tickSign\n      }, horizontal),\n      formattedValue: format(value, index, filteredTickValues)\n    };\n  });\n  return /*#__PURE__*/React.createElement(Group, {\n    className: cx('visx-axis', axisClassName),\n    innerRef: innerRef,\n    top: top,\n    left: left\n  }, children(_extends({}, restProps, {\n    axisFromPoint: axisFromPoint,\n    axisToPoint: axisToPoint,\n    hideAxisLine: hideAxisLine,\n    hideTicks: hideTicks,\n    hideZero: hideZero,\n    horizontal: horizontal,\n    numTicks: numTicks,\n    orientation: orientation,\n    rangePadding: rangePadding,\n    scale: scale,\n    tickFormat: format,\n    tickLength: tickLength,\n    tickPosition: tickPosition,\n    tickSign: tickSign,\n    ticks: ticks\n  })));\n}","import { toString } from '@visx/scale';\n/**\n * Returns a tick position for the given tick value\n */\nexport default function getTickFormatter(scale) {\n  // Broaden type before using 'xxx' in s as typeguard.\n  var s = scale;\n\n  // For point or band scales,\n  // have to add offset to make the tick centered.\n  if ('tickFormat' in s) {\n    return s.tickFormat();\n  }\n  return toString;\n}","/**\n * Create a function that returns a tick position for the given tick value\n */\nexport default function getTickPosition(scale, align) {\n  if (align === void 0) {\n    align = 'center';\n  }\n  // Broaden type before using 'xxx' in s as typeguard.\n  var s = scale;\n\n  // For point or band scales,\n  // have to add offset to make the tick at center or end.\n  if (align !== 'start' && 'bandwidth' in s) {\n    var offset = s.bandwidth();\n    if (align === 'center') offset /= 2;\n    if (s.round()) offset = Math.round(offset);\n    return function (d) {\n      var scaledValue = s(d);\n      return typeof scaledValue === 'number' ? scaledValue + offset : scaledValue;\n    };\n  }\n  return scale;\n}","var _excluded = [\"axisClassName\", \"labelOffset\", \"tickLength\", \"tickLabelProps\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var bottomTickLabelProps = {\n  dy: '0.25em',\n  fill: '#222',\n  fontFamily: 'Arial',\n  fontSize: 10,\n  textAnchor: 'middle'\n};\nexport default function AxisBottom(_ref) {\n  var axisClassName = _ref.axisClassName,\n    _ref$labelOffset = _ref.labelOffset,\n    labelOffset = _ref$labelOffset === void 0 ? 8 : _ref$labelOffset,\n    _ref$tickLength = _ref.tickLength,\n    tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n    tickLabelProps = _ref.tickLabelProps,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var tickLabelPropsFinal = typeof tickLabelProps === 'function' ? tickLabelProps : _extends({}, bottomTickLabelProps, tickLabelProps);\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-bottom', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.bottom,\n    tickLabelProps: tickLabelPropsFinal,\n    tickLength: tickLength\n  }, restProps));\n}","var _excluded = [\"axisClassName\", \"labelOffset\", \"tickLength\", \"tickLabelProps\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var leftTickLabelProps = {\n  dx: '-0.25em',\n  dy: '0.25em',\n  fill: '#222',\n  fontFamily: 'Arial',\n  fontSize: 10,\n  textAnchor: 'end'\n};\nexport default function AxisLeft(_ref) {\n  var axisClassName = _ref.axisClassName,\n    _ref$labelOffset = _ref.labelOffset,\n    labelOffset = _ref$labelOffset === void 0 ? 36 : _ref$labelOffset,\n    _ref$tickLength = _ref.tickLength,\n    tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n    tickLabelProps = _ref.tickLabelProps,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var tickLabelPropsFinal = typeof tickLabelProps === 'function' ? tickLabelProps : _extends({}, leftTickLabelProps, tickLabelProps);\n  return /*#__PURE__*/React.createElement(Axis, _extends({\n    axisClassName: cx('visx-axis-left', axisClassName),\n    labelOffset: labelOffset,\n    orientation: Orientation.left,\n    tickLabelProps: tickLabelPropsFinal,\n    tickLength: tickLength\n  }, restProps));\n}","export default function getScaleBandwidth(scale) {\n  return 'bandwidth' in scale ? scale.bandwidth() : 0;\n}","import _pt from \"prop-types\";\nvar _excluded = [\"top\", \"left\", \"scale\", \"height\", \"stroke\", \"strokeWidth\", \"strokeDasharray\", \"className\", \"numTicks\", \"lineStyle\", \"offset\", \"tickValues\", \"children\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport Line from '@visx/shape/lib/shapes/Line';\nimport { Group } from '@visx/group';\nimport { Point } from '@visx/point';\nimport { getTicks, coerceNumber } from '@visx/scale';\nimport getScaleBandwidth from '../utils/getScaleBandwidth';\nexport default function GridColumns(_ref) {\n  var _ref$top = _ref.top,\n    top = _ref$top === void 0 ? 0 : _ref$top,\n    _ref$left = _ref.left,\n    left = _ref$left === void 0 ? 0 : _ref$left,\n    scale = _ref.scale,\n    height = _ref.height,\n    _ref$stroke = _ref.stroke,\n    stroke = _ref$stroke === void 0 ? '#eaf0f6' : _ref$stroke,\n    _ref$strokeWidth = _ref.strokeWidth,\n    strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n    strokeDasharray = _ref.strokeDasharray,\n    className = _ref.className,\n    _ref$numTicks = _ref.numTicks,\n    numTicks = _ref$numTicks === void 0 ? 10 : _ref$numTicks,\n    lineStyle = _ref.lineStyle,\n    offset = _ref.offset,\n    tickValues = _ref.tickValues,\n    children = _ref.children,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var ticks = tickValues != null ? tickValues : getTicks(scale, numTicks);\n  var scaleOffset = (offset != null ? offset : 0) + getScaleBandwidth(scale) / 2;\n  var tickLines = ticks.map(function (d, index) {\n    var _coerceNumber;\n    var x = ((_coerceNumber = coerceNumber(scale(d))) != null ? _coerceNumber : 0) + scaleOffset;\n    return {\n      index: index,\n      from: new Point({\n        x: x,\n        y: 0\n      }),\n      to: new Point({\n        x: x,\n        y: height\n      })\n    };\n  });\n  return /*#__PURE__*/React.createElement(Group, {\n    className: cx('visx-columns', className),\n    top: top,\n    left: left\n  }, children ? children({\n    lines: tickLines\n  }) : tickLines.map(function (_ref2) {\n    var from = _ref2.from,\n      to = _ref2.to,\n      index = _ref2.index;\n    return /*#__PURE__*/React.createElement(Line, _extends({\n      key: \"column-line-\" + index,\n      from: from,\n      to: to,\n      stroke: stroke,\n      strokeWidth: strokeWidth,\n      strokeDasharray: strokeDasharray,\n      style: lineStyle\n    }, restProps));\n  }));\n}\nGridColumns.propTypes = {\n  tickValues: _pt.array,\n  height: _pt.number.isRequired\n};","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","/**\n * This is a workaround for TypeScript not inferring the correct\n * method overload/signature for some d3 shape methods.\n */\nexport default function setNumberOrNumberAccessor(func, value) {\n  if (typeof value === 'number') func(value);else func(value);\n}","import { arc as d3Arc, area as d3Area, line as d3Line, pie as d3Pie, radialLine as d3RadialLine, stack as d3Stack } from 'd3-shape';\nimport setNumberOrNumberAccessor from './setNumberOrNumberAccessor';\nimport stackOrder from './stackOrder';\nimport stackOffset from './stackOffset';\nexport function arc(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n    innerRadius = _ref.innerRadius,\n    outerRadius = _ref.outerRadius,\n    cornerRadius = _ref.cornerRadius,\n    startAngle = _ref.startAngle,\n    endAngle = _ref.endAngle,\n    padAngle = _ref.padAngle,\n    padRadius = _ref.padRadius;\n  var path = d3Arc();\n  if (innerRadius != null) setNumberOrNumberAccessor(path.innerRadius, innerRadius);\n  if (outerRadius != null) setNumberOrNumberAccessor(path.outerRadius, outerRadius);\n  if (cornerRadius != null) setNumberOrNumberAccessor(path.cornerRadius, cornerRadius);\n  if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n  if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n  if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n  if (padRadius != null) setNumberOrNumberAccessor(path.padRadius, padRadius);\n  return path;\n}\nexport function area(_temp2) {\n  var _ref2 = _temp2 === void 0 ? {} : _temp2,\n    x = _ref2.x,\n    x0 = _ref2.x0,\n    x1 = _ref2.x1,\n    y = _ref2.y,\n    y0 = _ref2.y0,\n    y1 = _ref2.y1,\n    defined = _ref2.defined,\n    curve = _ref2.curve;\n  var path = d3Area();\n  if (x) setNumberOrNumberAccessor(path.x, x);\n  if (x0) setNumberOrNumberAccessor(path.x0, x0);\n  if (x1) setNumberOrNumberAccessor(path.x1, x1);\n  if (y) setNumberOrNumberAccessor(path.y, y);\n  if (y0) setNumberOrNumberAccessor(path.y0, y0);\n  if (y1) setNumberOrNumberAccessor(path.y1, y1);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function line(_temp3) {\n  var _ref3 = _temp3 === void 0 ? {} : _temp3,\n    x = _ref3.x,\n    y = _ref3.y,\n    defined = _ref3.defined,\n    curve = _ref3.curve;\n  var path = d3Line();\n  if (x) setNumberOrNumberAccessor(path.x, x);\n  if (y) setNumberOrNumberAccessor(path.y, y);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function pie(_temp4) {\n  var _ref4 = _temp4 === void 0 ? {} : _temp4,\n    startAngle = _ref4.startAngle,\n    endAngle = _ref4.endAngle,\n    padAngle = _ref4.padAngle,\n    value = _ref4.value,\n    sort = _ref4.sort,\n    sortValues = _ref4.sortValues;\n  var path = d3Pie();\n\n  // ts can't distinguish between these method overloads\n  if (sort === null) path.sort(sort);else if (sort != null) path.sort(sort);\n  if (sortValues === null) path.sortValues(sortValues);else if (sortValues != null) path.sortValues(sortValues);\n  if (value != null) path.value(value);\n  if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n  if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n  if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n  return path;\n}\nexport function radialLine(_temp5) {\n  var _ref5 = _temp5 === void 0 ? {} : _temp5,\n    angle = _ref5.angle,\n    radius = _ref5.radius,\n    defined = _ref5.defined,\n    curve = _ref5.curve;\n  var path = d3RadialLine();\n  if (angle) setNumberOrNumberAccessor(path.angle, angle);\n  if (radius) setNumberOrNumberAccessor(path.radius, radius);\n  if (defined) path.defined(defined);\n  if (curve) path.curve(curve);\n  return path;\n}\nexport function stack(_ref6) {\n  var keys = _ref6.keys,\n    value = _ref6.value,\n    order = _ref6.order,\n    offset = _ref6.offset;\n  var path = d3Stack();\n  if (keys) path.keys(keys);\n  if (value) setNumberOrNumberAccessor(path.value, value);\n  if (order) path.order(stackOrder(order));\n  if (offset) path.offset(stackOffset(offset));\n  return path;\n}","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","var _excluded = [\"children\", \"data\", \"x\", \"y\", \"fill\", \"className\", \"curve\", \"innerRef\", \"defined\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport { line } from '../util/D3ShapeFactories';\nexport default function LinePath(_ref) {\n  var children = _ref.children,\n    _ref$data = _ref.data,\n    data = _ref$data === void 0 ? [] : _ref$data,\n    x = _ref.x,\n    y = _ref.y,\n    _ref$fill = _ref.fill,\n    fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n    className = _ref.className,\n    curve = _ref.curve,\n    innerRef = _ref.innerRef,\n    _ref$defined = _ref.defined,\n    defined = _ref$defined === void 0 ? function () {\n      return true;\n    } : _ref$defined,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var path = line({\n    x: x,\n    y: y,\n    defined: defined,\n    curve: curve\n  });\n  if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n    path: path\n  }));\n  return /*#__PURE__*/React.createElement(\"path\", _extends({\n    ref: innerRef,\n    className: cx('visx-linepath', className),\n    d: path(data) || '',\n    fill: fill\n    // without this a datum surrounded by nulls will not be visible\n    // https://github.com/d3/d3-shape#line_defined\n    ,\n    strokeLinecap: \"round\"\n  }, restProps));\n}","const isBrowser = typeof document !== \"undefined\";\n\nexport { isBrowser };\n","import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import { useRef } from 'react';\nimport { useIsomorphicLayoutEffect } from './use-isomorphic-effect.mjs';\n\nfunction useIsMounted() {\n    const isMounted = useRef(false);\n    useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n            isMounted.current = false;\n        };\n    }, []);\n    return isMounted;\n}\n\nexport { useIsMounted };\n","const noop = (any) => any;\n\nexport { noop };\n","const MotionGlobalConfig = {\n    skipAnimations: false,\n    useManualTiming: false,\n};\n\nexport { MotionGlobalConfig };\n","class Queue {\n    constructor() {\n        this.order = [];\n        this.scheduled = new Set();\n    }\n    add(process) {\n        if (!this.scheduled.has(process)) {\n            this.scheduled.add(process);\n            this.order.push(process);\n            return true;\n        }\n    }\n    remove(process) {\n        const index = this.order.indexOf(process);\n        if (index !== -1) {\n            this.order.splice(index, 1);\n            this.scheduled.delete(process);\n        }\n    }\n    clear() {\n        this.order.length = 0;\n        this.scheduled.clear();\n    }\n}\nfunction createRenderStep(runNextFrame) {\n    /**\n     * We create and reuse two queues, one to queue jobs for the current frame\n     * and one for the next. We reuse to avoid triggering GC after x frames.\n     */\n    let thisFrame = new Queue();\n    let nextFrame = new Queue();\n    let numToRun = 0;\n    /**\n     * Track whether we're currently processing jobs in this step. This way\n     * we can decide whether to schedule new jobs for this frame or next.\n     */\n    let isProcessing = false;\n    let flushNextFrame = false;\n    /**\n     * A set of processes which were marked keepAlive when scheduled.\n     */\n    const toKeepAlive = new WeakSet();\n    const step = {\n        /**\n         * Schedule a process to run on the next frame.\n         */\n        schedule: (callback, keepAlive = false, immediate = false) => {\n            const addToCurrentFrame = immediate && isProcessing;\n            const queue = addToCurrentFrame ? thisFrame : nextFrame;\n            if (keepAlive)\n                toKeepAlive.add(callback);\n            if (queue.add(callback) && addToCurrentFrame && isProcessing) {\n                // If we're adding it to the currently running queue, update its measured size\n                numToRun = thisFrame.order.length;\n            }\n            return callback;\n        },\n        /**\n         * Cancel the provided callback from running on the next frame.\n         */\n        cancel: (callback) => {\n            nextFrame.remove(callback);\n            toKeepAlive.delete(callback);\n        },\n        /**\n         * Execute all schedule callbacks.\n         */\n        process: (frameData) => {\n            /**\n             * If we're already processing we've probably been triggered by a flushSync\n             * inside an existing process. Instead of executing, mark flushNextFrame\n             * as true and ensure we flush the following frame at the end of this one.\n             */\n            if (isProcessing) {\n                flushNextFrame = true;\n                return;\n            }\n            isProcessing = true;\n            [thisFrame, nextFrame] = [nextFrame, thisFrame];\n            // Clear the next frame queue\n            nextFrame.clear();\n            // Execute this frame\n            numToRun = thisFrame.order.length;\n            if (numToRun) {\n                for (let i = 0; i < numToRun; i++) {\n                    const callback = thisFrame.order[i];\n                    if (toKeepAlive.has(callback)) {\n                        step.schedule(callback);\n                        runNextFrame();\n                    }\n                    callback(frameData);\n                }\n            }\n            isProcessing = false;\n            if (flushNextFrame) {\n                flushNextFrame = false;\n                step.process(frameData);\n            }\n        },\n    };\n    return step;\n}\n\nexport { createRenderStep };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst stepsOrder = [\n    \"read\", // Read\n    \"resolveKeyframes\", // Write/Read/Write/Read\n    \"update\", // Compute\n    \"preRender\", // Compute\n    \"render\", // Write\n    \"postRender\", // Compute\n];\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n    let runNextFrame = false;\n    let useDefaultElapsed = true;\n    const state = {\n        delta: 0,\n        timestamp: 0,\n        isProcessing: false,\n    };\n    const steps = stepsOrder.reduce((acc, key) => {\n        acc[key] = createRenderStep(() => (runNextFrame = true));\n        return acc;\n    }, {});\n    const processStep = (stepId) => {\n        steps[stepId].process(state);\n    };\n    const processBatch = () => {\n        const timestamp = MotionGlobalConfig.useManualTiming\n            ? state.timestamp\n            : performance.now();\n        runNextFrame = false;\n        state.delta = useDefaultElapsed\n            ? 1000 / 60\n            : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n        state.timestamp = timestamp;\n        state.isProcessing = true;\n        stepsOrder.forEach(processStep);\n        state.isProcessing = false;\n        if (runNextFrame && allowKeepAlive) {\n            useDefaultElapsed = false;\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const wake = () => {\n        runNextFrame = true;\n        useDefaultElapsed = true;\n        if (!state.isProcessing) {\n            scheduleNextBatch(processBatch);\n        }\n    };\n    const schedule = stepsOrder.reduce((acc, key) => {\n        const step = steps[key];\n        acc[key] = (process, keepAlive = false, immediate = false) => {\n            if (!runNextFrame)\n                wake();\n            return step.schedule(process, keepAlive, immediate);\n        };\n        return acc;\n    }, {});\n    const cancel = (process) => stepsOrder.forEach((key) => steps[key].cancel(process));\n    return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher, stepsOrder };\n","import { noop } from '../utils/noop.mjs';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, steps };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n","import { useRef } from 'react';\n\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nfunction useConstant(init) {\n    const ref = useRef(null);\n    if (ref.current === null) {\n        ref.current = init();\n    }\n    return ref.current;\n}\n\nexport { useConstant };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n    transformPagePoint: (p) => p,\n    isStatic: false,\n    reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","import { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useRef, useContext, useInsertionEffect } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\n\n/**\n * Measurement functionality has to be within a separate component\n * to leverage snapshot lifecycle.\n */\nclass PopChildMeasure extends React.Component {\n    getSnapshotBeforeUpdate(prevProps) {\n        const element = this.props.childRef.current;\n        if (element && prevProps.isPresent && !this.props.isPresent) {\n            const size = this.props.sizeRef.current;\n            size.height = element.offsetHeight || 0;\n            size.width = element.offsetWidth || 0;\n            size.top = element.offsetTop;\n            size.left = element.offsetLeft;\n        }\n        return null;\n    }\n    /**\n     * Required with getSnapshotBeforeUpdate to stop React complaining.\n     */\n    componentDidUpdate() { }\n    render() {\n        return this.props.children;\n    }\n}\nfunction PopChild({ children, isPresent }) {\n    const id = useId();\n    const ref = useRef(null);\n    const size = useRef({\n        width: 0,\n        height: 0,\n        top: 0,\n        left: 0,\n    });\n    const { nonce } = useContext(MotionConfigContext);\n    /**\n     * We create and inject a style block so we can apply this explicit\n     * sizing in a non-destructive manner by just deleting the style block.\n     *\n     * We can't apply size via render as the measurement happens\n     * in getSnapshotBeforeUpdate (post-render), likewise if we apply the\n     * styles directly on the DOM node, we might be overwriting\n     * styles set via the style prop.\n     */\n    useInsertionEffect(() => {\n        const { width, height, top, left } = size.current;\n        if (isPresent || !ref.current || !width || !height)\n            return;\n        ref.current.dataset.motionPopId = id;\n        const style = document.createElement(\"style\");\n        if (nonce)\n            style.nonce = nonce;\n        document.head.appendChild(style);\n        if (style.sheet) {\n            style.sheet.insertRule(`\n          [data-motion-pop-id=\"${id}\"] {\n            position: absolute !important;\n            width: ${width}px !important;\n            height: ${height}px !important;\n            top: ${top}px !important;\n            left: ${left}px !important;\n          }\n        `);\n        }\n        return () => {\n            document.head.removeChild(style);\n        };\n    }, [isPresent]);\n    return (jsx(PopChildMeasure, { isPresent: isPresent, childRef: ref, sizeRef: size, children: React.cloneElement(children, { ref }) }));\n}\n\nexport { PopChild };\n","import { jsx } from 'react/jsx-runtime';\nimport * as React from 'react';\nimport { useId, useMemo } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { PopChild } from './PopChild.mjs';\n\nconst PresenceChild = ({ children, initial, isPresent, onExitComplete, custom, presenceAffectsLayout, mode, }) => {\n    const presenceChildren = useConstant(newChildrenMap);\n    const id = useId();\n    const context = useMemo(() => ({\n        id,\n        initial,\n        isPresent,\n        custom,\n        onExitComplete: (childId) => {\n            presenceChildren.set(childId, true);\n            for (const isComplete of presenceChildren.values()) {\n                if (!isComplete)\n                    return; // can stop searching when any is incomplete\n            }\n            onExitComplete && onExitComplete();\n        },\n        register: (childId) => {\n            presenceChildren.set(childId, false);\n            return () => presenceChildren.delete(childId);\n        },\n    }), \n    /**\n     * If the presence of a child affects the layout of the components around it,\n     * we want to make a new context value to ensure they get re-rendered\n     * so they can detect that layout change.\n     */\n    presenceAffectsLayout ? [Math.random()] : [isPresent]);\n    useMemo(() => {\n        presenceChildren.forEach((_, key) => presenceChildren.set(key, false));\n    }, [isPresent]);\n    /**\n     * If there's no `motion` components to fire exit animations, we want to remove this\n     * component immediately.\n     */\n    React.useEffect(() => {\n        !isPresent &&\n            !presenceChildren.size &&\n            onExitComplete &&\n            onExitComplete();\n    }, [isPresent]);\n    if (mode === \"popLayout\") {\n        children = jsx(PopChild, { isPresent: isPresent, children: children });\n    }\n    return (jsx(PresenceContext.Provider, { value: context, children: children }));\n};\nfunction newChildrenMap() {\n    return new Map();\n}\n\nexport { PresenceChild };\n","import { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","import { noop } from './noop.mjs';\n\nlet warning = noop;\nlet invariant = noop;\nif (process.env.NODE_ENV !== \"production\") {\n    warning = (check, message) => {\n        if (!check && typeof console !== \"undefined\") {\n            console.warn(message);\n        }\n    };\n    invariant = (check, message) => {\n        if (!check) {\n            throw new Error(message);\n        }\n    };\n}\n\nexport { invariant, warning };\n","import { jsx, Fragment } from 'react/jsx-runtime';\nimport { useContext, useRef, cloneElement, Children, isValidElement } from 'react';\nimport { useForceUpdate } from '../../utils/use-force-update.mjs';\nimport { useIsMounted } from '../../utils/use-is-mounted.mjs';\nimport { PresenceChild } from './PresenceChild.mjs';\nimport { LayoutGroupContext } from '../../context/LayoutGroupContext.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { useUnmountEffect } from '../../utils/use-unmount-effect.mjs';\nimport { invariant } from '../../utils/errors.mjs';\n\nconst getChildKey = (child) => child.key || \"\";\nfunction updateChildLookup(children, allChildren) {\n    children.forEach((child) => {\n        const key = getChildKey(child);\n        allChildren.set(key, child);\n    });\n}\nfunction onlyElements(children) {\n    const filtered = [];\n    // We use forEach here instead of map as map mutates the component key by preprending `.$`\n    Children.forEach(children, (child) => {\n        if (isValidElement(child))\n            filtered.push(child);\n    });\n    return filtered;\n}\n/**\n * `AnimatePresence` enables the animation of components that have been removed from the tree.\n *\n * When adding/removing more than a single child, every child **must** be given a unique `key` prop.\n *\n * Any `motion` components that have an `exit` property defined will animate out when removed from\n * the tree.\n *\n * ```jsx\n * import { motion, AnimatePresence } from 'framer-motion'\n *\n * export const Items = ({ items }) => (\n *   <AnimatePresence>\n *     {items.map(item => (\n *       <motion.div\n *         key={item.id}\n *         initial={{ opacity: 0 }}\n *         animate={{ opacity: 1 }}\n *         exit={{ opacity: 0 }}\n *       />\n *     ))}\n *   </AnimatePresence>\n * )\n * ```\n *\n * You can sequence exit animations throughout a tree using variants.\n *\n * If a child contains multiple `motion` components with `exit` props, it will only unmount the child\n * once all `motion` components have finished animating out. Likewise, any components using\n * `usePresence` all need to call `safeToRemove`.\n *\n * @public\n */\nconst AnimatePresence = ({ children, custom, initial = true, onExitComplete, exitBeforeEnter, presenceAffectsLayout = true, mode = \"sync\", }) => {\n    invariant(!exitBeforeEnter, \"Replace exitBeforeEnter with mode='wait'\");\n    // We want to force a re-render once all exiting animations have finished. We\n    // either use a local forceRender function, or one from a parent context if it exists.\n    const forceRender = useContext(LayoutGroupContext).forceRender || useForceUpdate()[0];\n    const isMounted = useIsMounted();\n    // Filter out any children that aren't ReactElements. We can only track ReactElements with a props.key\n    const filteredChildren = onlyElements(children);\n    let childrenToRender = filteredChildren;\n    const exitingChildren = useRef(new Map()).current;\n    // Keep a living record of the children we're actually rendering so we\n    // can diff to figure out which are entering and exiting\n    const presentChildren = useRef(childrenToRender);\n    // A lookup table to quickly reference components by key\n    const allChildren = useRef(new Map()).current;\n    // If this is the initial component render, just deal with logic surrounding whether\n    // we play onMount animations or not.\n    const isInitialRender = useRef(true);\n    useIsomorphicLayoutEffect(() => {\n        isInitialRender.current = false;\n        updateChildLookup(filteredChildren, allChildren);\n        presentChildren.current = childrenToRender;\n    });\n    useUnmountEffect(() => {\n        isInitialRender.current = true;\n        allChildren.clear();\n        exitingChildren.clear();\n    });\n    if (isInitialRender.current) {\n        return (jsx(Fragment, { children: childrenToRender.map((child) => (jsx(PresenceChild, { isPresent: true, initial: initial ? undefined : false, presenceAffectsLayout: presenceAffectsLayout, mode: mode, children: child }, getChildKey(child)))) }));\n    }\n    // If this is a subsequent render, deal with entering and exiting children\n    childrenToRender = [...childrenToRender];\n    // Diff the keys of the currently-present and target children to update our\n    // exiting list.\n    const presentKeys = presentChildren.current.map(getChildKey);\n    const targetKeys = filteredChildren.map(getChildKey);\n    // Diff the present children with our target children and mark those that are exiting\n    const numPresent = presentKeys.length;\n    for (let i = 0; i < numPresent; i++) {\n        const key = presentKeys[i];\n        if (targetKeys.indexOf(key) === -1 && !exitingChildren.has(key)) {\n            exitingChildren.set(key, undefined);\n        }\n    }\n    // If we currently have exiting children, and we're deferring rendering incoming children\n    // until after all current children have exiting, empty the childrenToRender array\n    if (mode === \"wait\" && exitingChildren.size) {\n        childrenToRender = [];\n    }\n    // Loop through all currently exiting components and clone them to overwrite `animate`\n    // with any `exit` prop they might have defined.\n    exitingChildren.forEach((component, key) => {\n        // If this component is actually entering again, early return\n        if (targetKeys.indexOf(key) !== -1)\n            return;\n        const child = allChildren.get(key);\n        if (!child)\n            return;\n        const insertionIndex = presentKeys.indexOf(key);\n        let exitingComponent = component;\n        if (!exitingComponent) {\n            const onExit = () => {\n                // clean up the exiting children map\n                exitingChildren.delete(key);\n                // compute the keys of children that were rendered once but are no longer present\n                // this could happen in case of too many fast consequent renderings\n                // @link https://github.com/framer/motion/issues/2023\n                const leftOverKeys = Array.from(allChildren.keys()).filter((childKey) => !targetKeys.includes(childKey));\n                // clean up the all children map\n                leftOverKeys.forEach((leftOverKey) => allChildren.delete(leftOverKey));\n                // make sure to render only the children that are actually visible\n                presentChildren.current = filteredChildren.filter((presentChild) => {\n                    const presentChildKey = getChildKey(presentChild);\n                    return (\n                    // filter out the node exiting\n                    presentChildKey === key ||\n                        // filter out the leftover children\n                        leftOverKeys.includes(presentChildKey));\n                });\n                // Defer re-rendering until all exiting children have indeed left\n                if (!exitingChildren.size) {\n                    if (isMounted.current === false)\n                        return;\n                    forceRender();\n                    onExitComplete && onExitComplete();\n                }\n            };\n            exitingComponent = (jsx(PresenceChild, { isPresent: false, onExitComplete: onExit, custom: custom, presenceAffectsLayout: presenceAffectsLayout, mode: mode, children: child }, getChildKey(child)));\n            exitingChildren.set(key, exitingComponent);\n        }\n        childrenToRender.splice(insertionIndex, 0, exitingComponent);\n    });\n    // Add `MotionContext` even to children that don't need it to ensure we're rendering\n    // the same tree between renders\n    childrenToRender = childrenToRender.map((child) => {\n        const key = child.key;\n        return exitingChildren.has(key) ? (child) : (jsx(PresenceChild, { isPresent: true, presenceAffectsLayout: presenceAffectsLayout, mode: mode, children: child }, getChildKey(child)));\n    });\n    if (process.env.NODE_ENV !== \"production\" &&\n        mode === \"wait\" &&\n        childrenToRender.length > 1) {\n        console.warn(`You're attempting to animate multiple children within AnimatePresence, but its mode is set to \"wait\". This will lead to odd visual behaviour.`);\n    }\n    return (jsx(Fragment, { children: exitingChildren.size\n            ? childrenToRender\n            : childrenToRender.map((child) => cloneElement(child)) }));\n};\n\nexport { AnimatePresence };\n","import { useState, useCallback } from 'react';\nimport { useIsMounted } from './use-is-mounted.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction useForceUpdate() {\n    const isMounted = useIsMounted();\n    const [forcedRenderCount, setForcedRenderCount] = useState(0);\n    const forceRender = useCallback(() => {\n        isMounted.current && setForcedRenderCount(forcedRenderCount + 1);\n    }, [forcedRenderCount]);\n    /**\n     * Defer this to the end of the next animation frame in case there are multiple\n     * synchronous calls.\n     */\n    const deferredForceRender = useCallback(() => frame.postRender(forceRender), [forceRender]);\n    return [deferredForceRender, forcedRenderCount];\n}\n\nexport { useForceUpdate };\n","import { useEffect } from 'react';\n\nfunction useUnmountEffect(callback) {\n    return useEffect(() => () => callback(), []);\n}\n\nexport { useUnmountEffect };\n","import { createContext } from 'react';\n\nconst MotionContext = createContext({});\n\nexport { MotionContext };\n","import { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n","function isRefObject(ref) {\n    return (ref &&\n        typeof ref === \"object\" &&\n        Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","import { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","import { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';\n\nlet scheduleHandoffComplete = false;\nfunction useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor) {\n    const { visualElement: parent } = useContext(MotionContext);\n    const lazyContext = useContext(LazyContext);\n    const presenceContext = useContext(PresenceContext);\n    const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n    const visualElementRef = useRef();\n    /**\n     * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n     */\n    createVisualElement = createVisualElement || lazyContext.renderer;\n    if (!visualElementRef.current && createVisualElement) {\n        visualElementRef.current = createVisualElement(Component, {\n            visualState,\n            parent,\n            props,\n            presenceContext,\n            blockInitialAnimation: presenceContext\n                ? presenceContext.initial === false\n                : false,\n            reducedMotionConfig,\n        });\n    }\n    const visualElement = visualElementRef.current;\n    /**\n     * Load Motion gesture and animation features. These are rendered as renderless\n     * components so each feature can optionally make use of React lifecycle methods.\n     */\n    const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n    if (visualElement &&\n        !visualElement.projection &&\n        ProjectionNodeConstructor &&\n        (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n        createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n    }\n    useInsertionEffect(() => {\n        visualElement && visualElement.update(props, presenceContext);\n    });\n    /**\n     * Cache this value as we want to know whether HandoffAppearAnimations\n     * was present on initial render - it will be deleted after this.\n     */\n    const wantsHandoff = useRef(Boolean(props[optimizedAppearDataAttribute] &&\n        !window.HandoffComplete));\n    useIsomorphicLayoutEffect(() => {\n        if (!visualElement)\n            return;\n        visualElement.updateFeatures();\n        microtask.render(visualElement.render);\n        /**\n         * Ideally this function would always run in a useEffect.\n         *\n         * However, if we have optimised appear animations to handoff from,\n         * it needs to happen synchronously to ensure there's no flash of\n         * incorrect styles in the event of a hydration error.\n         *\n         * So if we detect a situtation where optimised appear animations\n         * are running, we use useLayoutEffect to trigger animations.\n         */\n        if (wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n    });\n    useEffect(() => {\n        if (!visualElement)\n            return;\n        if (!wantsHandoff.current && visualElement.animationState) {\n            visualElement.animationState.animateChanges();\n        }\n        if (wantsHandoff.current) {\n            wantsHandoff.current = false;\n            // This ensures all future calls to animateChanges() will run in useEffect\n            if (!scheduleHandoffComplete) {\n                scheduleHandoffComplete = true;\n                queueMicrotask(completeHandoff);\n            }\n        }\n    });\n    return visualElement;\n}\nfunction completeHandoff() {\n    window.HandoffComplete = true;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n    const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = props;\n    visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n        ? undefined\n        : getClosestProjectingNode(visualElement.parent));\n    visualElement.projection.setOptions({\n        layoutId,\n        layout,\n        alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n        visualElement,\n        scheduleRender: () => visualElement.scheduleRender(),\n        /**\n         * TODO: Update options in an effect. This could be tricky as it'll be too late\n         * to update by the time layout animations run.\n         * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n         * ensuring it gets called if there's no potential layout animations.\n         *\n         */\n        animationType: typeof layout === \"string\" ? layout : \"both\",\n        initialPromotionConfig,\n        layoutScroll,\n        layoutRoot,\n    });\n}\nfunction getClosestProjectingNode(visualElement) {\n    if (!visualElement)\n        return undefined;\n    return visualElement.options.allowProjection !== false\n        ? visualElement.projection\n        : getClosestProjectingNode(visualElement.parent);\n}\n\nexport { useVisualElement };\n","import { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n    return useCallback((instance) => {\n        instance && visualState.mount && visualState.mount(instance);\n        if (visualElement) {\n            if (instance) {\n                visualElement.mount(instance);\n            }\n            else {\n                visualElement.unmount();\n            }\n        }\n        if (externalRef) {\n            if (typeof externalRef === \"function\") {\n                externalRef(instance);\n            }\n            else if (isRefObject(externalRef)) {\n                externalRef.current = instance;\n            }\n        }\n    }, \n    /**\n     * Only pass a new ref callback to React if we've received a visual element\n     * factory. Otherwise we'll be mounting/remounting every time externalRef\n     * or other dependencies change.\n     */\n    [visualElement]);\n}\n\nexport { useMotionRef };\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n    return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n","function isAnimationControls(v) {\n    return (v !== null &&\n        typeof v === \"object\" &&\n        typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n","const variantPriorityOrder = [\n    \"animate\",\n    \"whileInView\",\n    \"whileFocus\",\n    \"whileHover\",\n    \"whileTap\",\n    \"whileDrag\",\n    \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n    return (isAnimationControls(props.animate) ||\n        variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n    return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n","import { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction useCreateMotionContext(props) {\n    const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n    return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n    return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\nexport { useCreateMotionContext };\n","import { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\nimport { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction getCurrentTreeVariants(props, context) {\n    if (isControllingVariants(props)) {\n        const { initial, animate } = props;\n        return {\n            initial: initial === false || isVariantLabel(initial)\n                ? initial\n                : undefined,\n            animate: isVariantLabel(animate) ? animate : undefined,\n        };\n    }\n    return props.inherit !== false ? context : {};\n}\n\nexport { getCurrentTreeVariants };\n","const featureProps = {\n    animation: [\n        \"animate\",\n        \"variants\",\n        \"whileHover\",\n        \"whileTap\",\n        \"exit\",\n        \"whileInView\",\n        \"whileFocus\",\n        \"whileDrag\",\n    ],\n    exit: [\"exit\"],\n    drag: [\"drag\", \"dragControls\"],\n    focus: [\"whileFocus\"],\n    hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n    tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n    pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n    inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n    layout: [\"layout\", \"layoutId\"],\n};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n    featureDefinitions[key] = {\n        isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n    };\n}\n\nexport { featureDefinitions };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","import { jsxs, jsx } from 'react/jsx-runtime';\nimport { forwardRef, useContext } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\nimport { warning, invariant } from '../utils/errors.mjs';\nimport { featureDefinitions } from './features/definitions.mjs';\n\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nfunction createMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n    preloadedFeatures && loadFeatures(preloadedFeatures);\n    function MotionComponent(props, externalRef) {\n        /**\n         * If we need to measure the element we load this functionality in a\n         * separate class component in order to gain access to getSnapshotBeforeUpdate.\n         */\n        let MeasureLayout;\n        const configAndProps = {\n            ...useContext(MotionConfigContext),\n            ...props,\n            layoutId: useLayoutId(props),\n        };\n        const { isStatic } = configAndProps;\n        const context = useCreateMotionContext(props);\n        const visualState = useVisualState(props, isStatic);\n        if (!isStatic && isBrowser) {\n            useStrictMode(configAndProps, preloadedFeatures);\n            const layoutProjection = getProjectionFunctionality(configAndProps);\n            MeasureLayout = layoutProjection.MeasureLayout;\n            /**\n             * Create a VisualElement for this component. A VisualElement provides a common\n             * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n             * providing a way of rendering to these APIs outside of the React render loop\n             * for more performant animations and interactions\n             */\n            context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode);\n        }\n        /**\n         * The mount order and hierarchy is specific to ensure our element ref\n         * is hydrated by the time features fire their effects.\n         */\n        return (jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)] }));\n    }\n    const ForwardRefComponent = forwardRef(MotionComponent);\n    ForwardRefComponent[motionComponentSymbol] = Component;\n    return ForwardRefComponent;\n}\nfunction useLayoutId({ layoutId }) {\n    const layoutGroupId = useContext(LayoutGroupContext).id;\n    return layoutGroupId && layoutId !== undefined\n        ? layoutGroupId + \"-\" + layoutId\n        : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n    const isStrict = useContext(LazyContext).strict;\n    /**\n     * If we're in development mode, check to make sure we're not rendering a motion component\n     * as a child of LazyMotion, as this will break the file-size benefits of using it.\n     */\n    if (process.env.NODE_ENV !== \"production\" &&\n        preloadedFeatures &&\n        isStrict) {\n        const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n        configAndProps.ignoreStrict\n            ? warning(false, strictMessage)\n            : invariant(false, strictMessage);\n    }\n}\nfunction getProjectionFunctionality(props) {\n    const { drag, layout } = featureDefinitions;\n    if (!drag && !layout)\n        return {};\n    const combined = { ...drag, ...layout };\n    return {\n        MeasureLayout: (drag === null || drag === void 0 ? void 0 : drag.isEnabled(props)) || (layout === null || layout === void 0 ? void 0 : layout.isEnabled(props))\n            ? combined.MeasureLayout\n            : undefined,\n        ProjectionNode: combined.ProjectionNode,\n    };\n}\n\nexport { createMotionComponent };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n    for (const key in features) {\n        featureDefinitions[key] = {\n            ...featureDefinitions[key],\n            ...features[key],\n        };\n    }\n}\n\nexport { loadFeatures };\n","import { createMotionComponent } from '../../motion/index.mjs';\n\n/**\n * Convert any React component into a `motion` component. The provided component\n * **must** use `React.forwardRef` to the underlying DOM component you want to animate.\n *\n * ```jsx\n * const Component = React.forwardRef((props, ref) => {\n *   return <div ref={ref} />\n * })\n *\n * const MotionComponent = motion(Component)\n * ```\n *\n * @public\n */\nfunction createMotionProxy(createConfig) {\n    function custom(Component, customMotionComponentConfig = {}) {\n        return createMotionComponent(createConfig(Component, customMotionComponentConfig));\n    }\n    if (typeof Proxy === \"undefined\") {\n        return custom;\n    }\n    /**\n     * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n     * Rather than generating them anew every render.\n     */\n    const componentCache = new Map();\n    return new Proxy(custom, {\n        /**\n         * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n         * The prop name is passed through as `key` and we can use that to generate a `motion`\n         * DOM component with that name.\n         */\n        get: (_target, key) => {\n            /**\n             * If this element doesn't exist in the component cache, create it and cache.\n             */\n            if (!componentCache.has(key)) {\n                componentCache.set(key, custom(key));\n            }\n            return componentCache.get(key);\n        },\n    });\n}\n\nexport { createMotionProxy };\n","/**\n * We keep these listed seperately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst lowercaseSVGElements = [\n    \"animate\",\n    \"circle\",\n    \"defs\",\n    \"desc\",\n    \"ellipse\",\n    \"g\",\n    \"image\",\n    \"line\",\n    \"filter\",\n    \"marker\",\n    \"mask\",\n    \"metadata\",\n    \"path\",\n    \"pattern\",\n    \"polygon\",\n    \"polyline\",\n    \"rect\",\n    \"stop\",\n    \"switch\",\n    \"symbol\",\n    \"svg\",\n    \"text\",\n    \"tspan\",\n    \"use\",\n    \"view\",\n];\n\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction isSVGComponent(Component) {\n    if (\n    /**\n     * If it's not a string, it's a custom React component. Currently we only support\n     * HTML custom React components.\n     */\n    typeof Component !== \"string\" ||\n        /**\n         * If it contains a dash, the element is a custom HTML webcomponent.\n         */\n        Component.includes(\"-\")) {\n        return false;\n    }\n    else if (\n    /**\n     * If it's in our list of lowercase SVG tags, it's an SVG component\n     */\n    lowercaseSVGElements.indexOf(Component) > -1 ||\n        /**\n         * If it contains a capital letter, it's an SVG component\n         */\n        /[A-Z]/u.test(Component)) {\n        return true;\n    }\n    return false;\n}\n\nexport { isSVGComponent };\n","const scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n    Object.assign(scaleCorrectors, correctors);\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n    \"transformPerspective\",\n    \"x\",\n    \"y\",\n    \"z\",\n    \"translateX\",\n    \"translateY\",\n    \"translateZ\",\n    \"scale\",\n    \"scaleX\",\n    \"scaleY\",\n    \"rotate\",\n    \"rotateX\",\n    \"rotateY\",\n    \"rotateZ\",\n    \"skew\",\n    \"skewX\",\n    \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n */\nconst transformProps = new Set(transformPropOrder);\n\nexport { transformPropOrder, transformProps };\n","import { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/transform.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n    return (transformProps.has(key) ||\n        key.startsWith(\"origin\") ||\n        ((layout || layoutId !== undefined) &&\n            (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue };\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n","import { transformPropOrder } from './transform.mjs';\n\nconst translateAlias = {\n    x: \"translateX\",\n    y: \"translateY\",\n    z: \"translateZ\",\n    transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(transform, { enableHardwareAcceleration = true, allowTransformNone = true, }, transformIsDefault, transformTemplate) {\n    // The transform string we're going to build into.\n    let transformString = \"\";\n    /**\n     * Loop over all possible transforms in order, adding the ones that\n     * are present to the transform string.\n     */\n    for (let i = 0; i < numTransforms; i++) {\n        const key = transformPropOrder[i];\n        if (transform[key] !== undefined) {\n            const transformName = translateAlias[key] || key;\n            transformString += `${transformName}(${transform[key]}) `;\n        }\n    }\n    if (enableHardwareAcceleration && !transform.z) {\n        transformString += \"translateZ(0)\";\n    }\n    transformString = transformString.trim();\n    // If we have a custom `transform` template, pass our transform values and\n    // generated transformString to that before returning\n    if (transformTemplate) {\n        transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n    }\n    else if (allowTransformNone && transformIsDefault) {\n        transformString = \"none\";\n    }\n    return transformString;\n}\n\nexport { buildTransform };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = checkStringStartsWith(\"--\");\nconst startsAsVariableToken = checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n    const startsWithToken = startsAsVariableToken(value);\n    if (!startsWithToken)\n        return false;\n    // Ensure any comments are stripped from the value as this can harm performance of the regex.\n    return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n\nexport { isCSSVariableName, isCSSVariableToken };\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n    return type && typeof value === \"number\"\n        ? type.transform(value)\n        : value;\n};\n\nexport { getValueAsType };\n","const clamp = (min, max, v) => {\n    if (v > max)\n        return max;\n    if (v < min)\n        return min;\n    return v;\n};\n\nexport { clamp };\n","import { clamp } from '../../../utils/clamp.mjs';\n\nconst number = {\n    test: (v) => typeof v === \"number\",\n    parse: parseFloat,\n    transform: (v) => v,\n};\nconst alpha = {\n    ...number,\n    transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n    ...number,\n    default: 1,\n};\n\nexport { alpha, number, scale };\n","/**\n * TODO: When we move from string as a source of truth to data models\n * everything in this folder should probably be referred to as models vs types\n */\n// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\nconst floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\nconst colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\nconst singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\nfunction isString(v) {\n    return typeof v === \"string\";\n}\n\nexport { colorRegex, floatRegex, isString, sanitize, singleColorRegex };\n","import { isString } from '../utils.mjs';\n\nconst createUnitType = (unit) => ({\n    test: (v) => isString(v) && v.endsWith(unit) && v.split(\" \").length === 1,\n    parse: parseFloat,\n    transform: (v) => `${v}${unit}`,\n});\nconst degrees = createUnitType(\"deg\");\nconst percent = createUnitType(\"%\");\nconst px = createUnitType(\"px\");\nconst vh = createUnitType(\"vh\");\nconst vw = createUnitType(\"vw\");\nconst progressPercentage = {\n    ...percent,\n    parse: (v) => percent.parse(v) / 100,\n    transform: (v) => percent.transform(v * 100),\n};\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n","import { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n    ...number,\n    transform: Math.round,\n};\n\nexport { int };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { px, degrees, progressPercentage } from '../../../value/types/numbers/units.mjs';\nimport { int } from './type-int.mjs';\n\nconst numberValueTypes = {\n    // Border props\n    borderWidth: px,\n    borderTopWidth: px,\n    borderRightWidth: px,\n    borderBottomWidth: px,\n    borderLeftWidth: px,\n    borderRadius: px,\n    radius: px,\n    borderTopLeftRadius: px,\n    borderTopRightRadius: px,\n    borderBottomRightRadius: px,\n    borderBottomLeftRadius: px,\n    // Positioning props\n    width: px,\n    maxWidth: px,\n    height: px,\n    maxHeight: px,\n    size: px,\n    top: px,\n    right: px,\n    bottom: px,\n    left: px,\n    // Spacing props\n    padding: px,\n    paddingTop: px,\n    paddingRight: px,\n    paddingBottom: px,\n    paddingLeft: px,\n    margin: px,\n    marginTop: px,\n    marginRight: px,\n    marginBottom: px,\n    marginLeft: px,\n    // Transform props\n    rotate: degrees,\n    rotateX: degrees,\n    rotateY: degrees,\n    rotateZ: degrees,\n    scale,\n    scaleX: scale,\n    scaleY: scale,\n    scaleZ: scale,\n    skew: degrees,\n    skewX: degrees,\n    skewY: degrees,\n    distance: px,\n    translateX: px,\n    translateY: px,\n    translateZ: px,\n    x: px,\n    y: px,\n    z: px,\n    perspective: px,\n    transformPerspective: px,\n    opacity: alpha,\n    originX: progressPercentage,\n    originY: progressPercentage,\n    originZ: px,\n    // Misc\n    zIndex: int,\n    backgroundPositionX: px,\n    backgroundPositionY: px,\n    // SVG\n    fillOpacity: alpha,\n    strokeOpacity: alpha,\n    numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { buildTransform } from './build-transform.mjs';\nimport { isCSSVariableName } from '../../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './transform.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\n\nfunction buildHTMLStyles(state, latestValues, options, transformTemplate) {\n    const { style, vars, transform, transformOrigin } = state;\n    // Track whether we encounter any transform or transformOrigin values.\n    let hasTransform = false;\n    let hasTransformOrigin = false;\n    // Does the calculated transform essentially equal \"none\"?\n    let transformIsNone = true;\n    /**\n     * Loop over all our latest animated values and decide whether to handle them\n     * as a style or CSS variable.\n     *\n     * Transforms and transform origins are kept seperately for further processing.\n     */\n    for (const key in latestValues) {\n        const value = latestValues[key];\n        /**\n         * If this is a CSS variable we don't do any further processing.\n         */\n        if (isCSSVariableName(key)) {\n            vars[key] = value;\n            continue;\n        }\n        // Convert the value to its default value type, ie 0 -> \"0px\"\n        const valueType = numberValueTypes[key];\n        const valueAsType = getValueAsType(value, valueType);\n        if (transformProps.has(key)) {\n            // If this is a transform, flag to enable further transform processing\n            hasTransform = true;\n            transform[key] = valueAsType;\n            // If we already know we have a non-default transform, early return\n            if (!transformIsNone)\n                continue;\n            // Otherwise check to see if this is a default transform\n            if (value !== (valueType.default || 0))\n                transformIsNone = false;\n        }\n        else if (key.startsWith(\"origin\")) {\n            // If this is a transform origin, flag and enable further transform-origin processing\n            hasTransformOrigin = true;\n            transformOrigin[key] = valueAsType;\n        }\n        else {\n            style[key] = valueAsType;\n        }\n    }\n    if (!latestValues.transform) {\n        if (hasTransform || transformTemplate) {\n            style.transform = buildTransform(state.transform, options, transformIsNone, transformTemplate);\n        }\n        else if (style.transform) {\n            /**\n             * If we have previously created a transform but currently don't have any,\n             * reset transform style to none.\n             */\n            style.transform = \"none\";\n        }\n    }\n    /**\n     * Build a transformOrigin style. Uses the same defaults as the browser for\n     * undefined origins.\n     */\n    if (hasTransformOrigin) {\n        const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n        style.transformOrigin = `${originX} ${originY} ${originZ}`;\n    }\n}\n\nexport { buildHTMLStyles };\n","const createHtmlRenderState = () => ({\n    style: {},\n    transform: {},\n    transformOrigin: {},\n    vars: {},\n});\n\nexport { createHtmlRenderState };\n","import { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction copyRawValuesOnly(target, source, props) {\n    for (const key in source) {\n        if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n            target[key] = source[key];\n        }\n    }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState, isStatic) {\n    return useMemo(() => {\n        const state = createHtmlRenderState();\n        buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);\n        return Object.assign({}, state.vars, state.style);\n    }, [visualState]);\n}\nfunction useStyle(props, visualState, isStatic) {\n    const styleProp = props.style || {};\n    const style = {};\n    /**\n     * Copy non-Motion Values straight into style\n     */\n    copyRawValuesOnly(style, styleProp, props);\n    Object.assign(style, useInitialMotionValues(props, visualState, isStatic));\n    return style;\n}\nfunction useHTMLProps(props, visualState, isStatic) {\n    // The `any` isn't ideal but it is the type of createElement props argument\n    const htmlProps = {};\n    const style = useStyle(props, visualState, isStatic);\n    if (props.drag && props.dragListener !== false) {\n        // Disable the ghost element when a user drags\n        htmlProps.draggable = false;\n        // Disable text selection\n        style.userSelect =\n            style.WebkitUserSelect =\n                style.WebkitTouchCallout =\n                    \"none\";\n        // Disable scrolling on the draggable direction\n        style.touchAction =\n            props.drag === true\n                ? \"none\"\n                : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n    }\n    if (props.tabIndex === undefined &&\n        (props.onTap || props.onTapStart || props.whileTap)) {\n        htmlProps.tabIndex = 0;\n    }\n    htmlProps.style = style;\n    return htmlProps;\n}\n\nexport { copyRawValuesOnly, useHTMLProps };\n","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n    \"animate\",\n    \"exit\",\n    \"variants\",\n    \"initial\",\n    \"style\",\n    \"values\",\n    \"variants\",\n    \"transition\",\n    \"transformTemplate\",\n    \"custom\",\n    \"inherit\",\n    \"onBeforeLayoutMeasure\",\n    \"onAnimationStart\",\n    \"onAnimationComplete\",\n    \"onUpdate\",\n    \"onDragStart\",\n    \"onDrag\",\n    \"onDragEnd\",\n    \"onMeasureDragConstraints\",\n    \"onDirectionLock\",\n    \"onDragTransitionEnd\",\n    \"_dragX\",\n    \"_dragY\",\n    \"onHoverStart\",\n    \"onHoverEnd\",\n    \"onViewportEnter\",\n    \"onViewportLeave\",\n    \"globalTapTarget\",\n    \"ignoreStrict\",\n    \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nfunction isValidMotionProp(key) {\n    return (key.startsWith(\"while\") ||\n        (key.startsWith(\"drag\") && key !== \"draggable\") ||\n        key.startsWith(\"layout\") ||\n        key.startsWith(\"onTap\") ||\n        key.startsWith(\"onPan\") ||\n        key.startsWith(\"onLayout\") ||\n        validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n    if (!isValidProp)\n        return;\n    // Explicitly filter our events\n    shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n    /**\n     * We attempt to import this package but require won't be defined in esm environments, in that case\n     * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n     * in favour of explicit injection.\n     */\n    loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n    // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction filterProps(props, isDom, forwardMotionProps) {\n    const filteredProps = {};\n    for (const key in props) {\n        /**\n         * values is considered a valid prop by Emotion, so if it's present\n         * this will be rendered out to the DOM unless explicitly filtered.\n         *\n         * We check the type as it could be used with the `feColorMatrix`\n         * element, which we support.\n         */\n        if (key === \"values\" && typeof props.values === \"object\")\n            continue;\n        if (shouldForward(key) ||\n            (forwardMotionProps === true && isValidMotionProp(key)) ||\n            (!isDom && !isValidMotionProp(key)) ||\n            // If trying to use native HTML drag events, forward drag listeners\n            (props[\"draggable\"] &&\n                key.startsWith(\"onDrag\"))) {\n            filteredProps[key] =\n                props[key];\n        }\n    }\n    return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nfunction calcOrigin(origin, offset, size) {\n    return typeof origin === \"string\"\n        ? origin\n        : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n    const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n    const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n    return `${pxOriginX} ${pxOriginY}`;\n}\n\nexport { calcSVGTransformOrigin };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst dashKeys = {\n    offset: \"stroke-dashoffset\",\n    array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n    offset: \"strokeDashoffset\",\n    array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n    // Normalise path length by setting SVG attribute pathLength to 1\n    attrs.pathLength = 1;\n    // We use dash case when setting attributes directly to the DOM node and camel case\n    // when defining props on a React component.\n    const keys = useDashCase ? dashKeys : camelKeys;\n    // Build the dash offset\n    attrs[keys.offset] = px.transform(-offset);\n    // Build the dash array\n    const pathLength = px.transform(length);\n    const pathSpacing = px.transform(spacing);\n    attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\nexport { buildSVGPath };\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, options, isSVGTag, transformTemplate) {\n    buildHTMLStyles(state, latest, options, transformTemplate);\n    /**\n     * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n     * as normal HTML tags.\n     */\n    if (isSVGTag) {\n        if (state.style.viewBox) {\n            state.attrs.viewBox = state.style.viewBox;\n        }\n        return;\n    }\n    state.attrs = state.style;\n    state.style = {};\n    const { attrs, style, dimensions } = state;\n    /**\n     * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n     * and copy it into style.\n     */\n    if (attrs.transform) {\n        if (dimensions)\n            style.transform = attrs.transform;\n        delete attrs.transform;\n    }\n    // Parse transformOrigin\n    if (dimensions &&\n        (originX !== undefined || originY !== undefined || style.transform)) {\n        style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n    }\n    // Render attrX/attrY/attrScale as attributes\n    if (attrX !== undefined)\n        attrs.x = attrX;\n    if (attrY !== undefined)\n        attrs.y = attrY;\n    if (attrScale !== undefined)\n        attrs.scale = attrScale;\n    // Build SVG path if one has been defined\n    if (pathLength !== undefined) {\n        buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n    }\n}\n\nexport { buildSVGAttrs };\n","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n    ...createHtmlRenderState(),\n    attrs: {},\n});\n\nexport { createSvgRenderState };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","import { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n    const visualProps = useMemo(() => {\n        const state = createSvgRenderState();\n        buildSVGAttrs(state, visualState, { enableHardwareAcceleration: false }, isSVGTag(Component), props.transformTemplate);\n        return {\n            ...state.attrs,\n            style: { ...state.style },\n        };\n    }, [visualState]);\n    if (props.style) {\n        const rawStyles = {};\n        copyRawValuesOnly(rawStyles, props.style, props);\n        visualProps.style = { ...rawStyles, ...visualProps.style };\n    }\n    return visualProps;\n}\n\nexport { useSVGProps };\n","import { Fragment, useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction createUseRender(forwardMotionProps = false) {\n    const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n        const useVisualProps = isSVGComponent(Component)\n            ? useSVGProps\n            : useHTMLProps;\n        const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n        const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n        const elementProps = Component !== Fragment\n            ? { ...filteredProps, ...visualProps, ref }\n            : {};\n        /**\n         * If component has been handed a motion value as its child,\n         * memoise its initial value and render that. Subsequent updates\n         * will be handled by the onChange handler\n         */\n        const { children } = props;\n        const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n        return createElement(Component, {\n            ...elementProps,\n            children: renderedChildren,\n        });\n    };\n    return useRender;\n}\n\nexport { createUseRender };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n    Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n    // Loop over any CSS variables and assign those.\n    for (const key in vars) {\n        element.style.setProperty(key, vars[key]);\n    }\n}\n\nexport { renderHTML };\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n    \"baseFrequency\",\n    \"diffuseConstant\",\n    \"kernelMatrix\",\n    \"kernelUnitLength\",\n    \"keySplines\",\n    \"keyTimes\",\n    \"limitingConeAngle\",\n    \"markerHeight\",\n    \"markerWidth\",\n    \"numOctaves\",\n    \"targetX\",\n    \"targetY\",\n    \"surfaceScale\",\n    \"specularConstant\",\n    \"specularExponent\",\n    \"stdDeviation\",\n    \"tableValues\",\n    \"viewBox\",\n    \"gradientTransform\",\n    \"pathLength\",\n    \"startOffset\",\n    \"textLength\",\n    \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n    renderHTML(element, renderState, undefined, projection);\n    for (const key in renderState.attrs) {\n        element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n    }\n}\n\nexport { renderSVG };\n","import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    var _a;\n    const { style } = props;\n    const newValues = {};\n    for (const key in style) {\n        if (isMotionValue(style[key]) ||\n            (prevProps.style &&\n                isMotionValue(prevProps.style[key])) ||\n            isForcedMotionValue(key, props) ||\n            ((_a = visualElement === null || visualElement === void 0 ? void 0 : visualElement.getValue(key)) === null || _a === void 0 ? void 0 : _a.liveStyle) !== undefined) {\n            newValues[key] = style[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n    const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n    for (const key in props) {\n        if (isMotionValue(props[key]) ||\n            isMotionValue(prevProps[key])) {\n            const targetKey = transformPropOrder.indexOf(key) !== -1\n                ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n                : key;\n            newValues[targetKey] = props[key];\n        }\n    }\n    return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","function getValueState(visualElement) {\n    const state = [{}, {}];\n    visualElement === null || visualElement === void 0 ? void 0 : visualElement.values.forEach((value, key) => {\n        state[0][key] = value.get();\n        state[1][key] = value.getVelocity();\n    });\n    return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n    /**\n     * If the variant definition is a function, resolve.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    /**\n     * If the variant definition is a variant label, or\n     * the function returned a variant label, resolve.\n     */\n    if (typeof definition === \"string\") {\n        definition = props.variants && props.variants[definition];\n    }\n    /**\n     * At this point we've resolved both functions and variant labels,\n     * but the resolved variant label might itself have been a function.\n     * If so, resolve. This can only have returned a valid target object.\n     */\n    if (typeof definition === \"function\") {\n        const [current, velocity] = getValueState(visualElement);\n        definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n    }\n    return definition;\n}\n\nexport { resolveVariantFromProps };\n","const isKeyframesTarget = (v) => {\n    return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';\n\nconst isCustomValue = (v) => {\n    return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n    // TODO maybe throw if v.length - 1 is placeholder token?\n    return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nexport { isCustomValue, resolveFinalValueInKeyframes };\n","import { isCustomValue } from '../../utils/resolve-value.mjs';\nimport { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n    const unwrappedValue = isMotionValue(value) ? value.get() : value;\n    return isCustomValue(unwrappedValue)\n        ? unwrappedValue.toValue()\n        : unwrappedValue;\n}\n\nexport { resolveMotionValue };\n","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {\n    const state = {\n        latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n        renderState: createRenderState(),\n    };\n    if (onMount) {\n        state.mount = (instance) => onMount(props, instance, state);\n    }\n    return state;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n    const context = useContext(MotionContext);\n    const presenceContext = useContext(PresenceContext);\n    const make = () => makeState(config, props, context, presenceContext);\n    return isStatic ? make() : useConstant(make);\n};\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n    const values = {};\n    const motionValues = scrapeMotionValues(props, {});\n    for (const key in motionValues) {\n        values[key] = resolveMotionValue(motionValues[key]);\n    }\n    let { initial, animate } = props;\n    const isControllingVariants$1 = isControllingVariants(props);\n    const isVariantNode$1 = isVariantNode(props);\n    if (context &&\n        isVariantNode$1 &&\n        !isControllingVariants$1 &&\n        props.inherit !== false) {\n        if (initial === undefined)\n            initial = context.initial;\n        if (animate === undefined)\n            animate = context.animate;\n    }\n    let isInitialAnimationBlocked = presenceContext\n        ? presenceContext.initial === false\n        : false;\n    isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n    const variantToSet = isInitialAnimationBlocked ? animate : initial;\n    if (variantToSet &&\n        typeof variantToSet !== \"boolean\" &&\n        !isAnimationControls(variantToSet)) {\n        const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n        list.forEach((definition) => {\n            const resolved = resolveVariantFromProps(props, definition);\n            if (!resolved)\n                return;\n            const { transitionEnd, transition, ...target } = resolved;\n            for (const key in target) {\n                let valueTarget = target[key];\n                if (Array.isArray(valueTarget)) {\n                    /**\n                     * Take final keyframe if the initial animation is blocked because\n                     * we want to initialise at the end of that blocked animation.\n                     */\n                    const index = isInitialAnimationBlocked\n                        ? valueTarget.length - 1\n                        : 0;\n                    valueTarget = valueTarget[index];\n                }\n                if (valueTarget !== null) {\n                    values[key] = valueTarget;\n                }\n            }\n            for (const key in transitionEnd)\n                values[key] = transitionEnd[key];\n        });\n    }\n    return values;\n}\n\nexport { makeUseVisualState };\n","import { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst svgMotionConfig = {\n    useVisualState: makeUseVisualState({\n        scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n        createRenderState: createSvgRenderState,\n        onMount: (props, instance, { renderState, latestValues }) => {\n            frame.read(() => {\n                try {\n                    renderState.dimensions =\n                        typeof instance.getBBox ===\n                            \"function\"\n                            ? instance.getBBox()\n                            : instance.getBoundingClientRect();\n                }\n                catch (e) {\n                    // Most likely trying to measure an unrendered element under Firefox\n                    renderState.dimensions = {\n                        x: 0,\n                        y: 0,\n                        width: 0,\n                        height: 0,\n                    };\n                }\n            });\n            frame.render(() => {\n                buildSVGAttrs(renderState, latestValues, { enableHardwareAcceleration: false }, isSVGTag(instance.tagName), props.transformTemplate);\n                renderSVG(instance, renderState);\n            });\n        },\n    }),\n};\n\nexport { svgMotionConfig };\n","import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst htmlMotionConfig = {\n    useVisualState: makeUseVisualState({\n        scrapeMotionValuesFromProps,\n        createRenderState: createHtmlRenderState,\n    }),\n};\n\nexport { htmlMotionConfig };\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n    target.addEventListener(eventName, handler, options);\n    return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n","const isPrimaryPointer = (event) => {\n    if (event.pointerType === \"mouse\") {\n        return typeof event.button !== \"number\" || event.button <= 0;\n    }\n    else {\n        /**\n         * isPrimary is true for all mice buttons, whereas every touch point\n         * is regarded as its own input. So subsequent concurrent touch points\n         * will be false.\n         *\n         * Specifically match against false here as incomplete versions of\n         * PointerEvents in very old browser might have it set as undefined.\n         */\n        return event.isPrimary !== false;\n    }\n};\n\nexport { isPrimaryPointer };\n","import { isPrimaryPointer } from './utils/is-primary-pointer.mjs';\n\nfunction extractEventInfo(event, pointType = \"page\") {\n    return {\n        point: {\n            x: event[`${pointType}X`],\n            y: event[`${pointType}Y`],\n        },\n    };\n}\nconst addPointerInfo = (handler) => {\n    return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n    return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param  {...functions} transformers\n * @return {function}\n */\nconst combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","function createLock(name) {\n    let lock = null;\n    return () => {\n        const openLock = () => {\n            lock = null;\n        };\n        if (lock === null) {\n            lock = name;\n            return openLock;\n        }\n        return false;\n    };\n}\nconst globalHorizontalLock = createLock(\"dragHorizontal\");\nconst globalVerticalLock = createLock(\"dragVertical\");\nfunction getGlobalLock(drag) {\n    let lock = false;\n    if (drag === \"y\") {\n        lock = globalVerticalLock();\n    }\n    else if (drag === \"x\") {\n        lock = globalHorizontalLock();\n    }\n    else {\n        const openHorizontal = globalHorizontalLock();\n        const openVertical = globalVerticalLock();\n        if (openHorizontal && openVertical) {\n            lock = () => {\n                openHorizontal();\n                openVertical();\n            };\n        }\n        else {\n            // Release the locks because we don't use them\n            if (openHorizontal)\n                openHorizontal();\n            if (openVertical)\n                openVertical();\n        }\n    }\n    return lock;\n}\nfunction isDragActive() {\n    // Check the gesture lock - if we get it, it means no drag gesture is active\n    // and we can safely fire the tap gesture.\n    const openGestureLock = getGlobalLock(true);\n    if (!openGestureLock)\n        return true;\n    openGestureLock();\n    return false;\n}\n\nexport { createLock, getGlobalLock, isDragActive };\n","class Feature {\n    constructor(node) {\n        this.isMounted = false;\n        this.node = node;\n    }\n    update() { }\n}\n\nexport { Feature };\n","import { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction addHoverEvent(node, isActive) {\n    const eventName = isActive ? \"pointerenter\" : \"pointerleave\";\n    const callbackName = isActive ? \"onHoverStart\" : \"onHoverEnd\";\n    const handleEvent = (event, info) => {\n        if (event.pointerType === \"touch\" || isDragActive())\n            return;\n        const props = node.getProps();\n        if (node.animationState && props.whileHover) {\n            node.animationState.setActive(\"whileHover\", isActive);\n        }\n        const callback = props[callbackName];\n        if (callback) {\n            frame.postRender(() => callback(event, info));\n        }\n    };\n    return addPointerEvent(node.current, eventName, handleEvent, {\n        passive: !node.getProps()[callbackName],\n    });\n}\nclass HoverGesture extends Feature {\n    mount() {\n        this.unmount = pipe(addHoverEvent(this.node, true), addHoverEvent(this.node, false));\n    }\n    unmount() { }\n}\n\nexport { HoverGesture };\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n    if (!child) {\n        return false;\n    }\n    else if (parent === child) {\n        return true;\n    }\n    else {\n        return isNodeOrChild(parent, child.parentElement);\n    }\n};\n\nexport { isNodeOrChild };\n","import { extractEventInfo } from '../events/event-info.mjs';\nimport { addDomEvent } from '../events/add-dom-event.mjs';\nimport { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { isNodeOrChild } from './utils/is-node-or-child.mjs';\nimport { noop } from '../utils/noop.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction fireSyntheticPointerEvent(name, handler) {\n    if (!handler)\n        return;\n    const syntheticPointerEvent = new PointerEvent(\"pointer\" + name);\n    handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent));\n}\nclass PressGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.removeStartListeners = noop;\n        this.removeEndListeners = noop;\n        this.removeAccessibleListeners = noop;\n        this.startPointerPress = (startEvent, startInfo) => {\n            if (this.isPressing)\n                return;\n            this.removeEndListeners();\n            const props = this.node.getProps();\n            const endPointerPress = (endEvent, endInfo) => {\n                if (!this.checkPressEnd())\n                    return;\n                const { onTap, onTapCancel, globalTapTarget } = this.node.getProps();\n                /**\n                 * We only count this as a tap gesture if the event.target is the same\n                 * as, or a child of, this component's element\n                 */\n                const handler = !globalTapTarget &&\n                    !isNodeOrChild(this.node.current, endEvent.target)\n                    ? onTapCancel\n                    : onTap;\n                if (handler) {\n                    frame.update(() => handler(endEvent, endInfo));\n                }\n            };\n            const removePointerUpListener = addPointerEvent(window, \"pointerup\", endPointerPress, {\n                passive: !(props.onTap || props[\"onPointerUp\"]),\n            });\n            const removePointerCancelListener = addPointerEvent(window, \"pointercancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo), {\n                passive: !(props.onTapCancel ||\n                    props[\"onPointerCancel\"]),\n            });\n            this.removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);\n            this.startPress(startEvent, startInfo);\n        };\n        this.startAccessiblePress = () => {\n            const handleKeydown = (keydownEvent) => {\n                if (keydownEvent.key !== \"Enter\" || this.isPressing)\n                    return;\n                const handleKeyup = (keyupEvent) => {\n                    if (keyupEvent.key !== \"Enter\" || !this.checkPressEnd())\n                        return;\n                    fireSyntheticPointerEvent(\"up\", (event, info) => {\n                        const { onTap } = this.node.getProps();\n                        if (onTap) {\n                            frame.postRender(() => onTap(event, info));\n                        }\n                    });\n                };\n                this.removeEndListeners();\n                this.removeEndListeners = addDomEvent(this.node.current, \"keyup\", handleKeyup);\n                fireSyntheticPointerEvent(\"down\", (event, info) => {\n                    this.startPress(event, info);\n                });\n            };\n            const removeKeydownListener = addDomEvent(this.node.current, \"keydown\", handleKeydown);\n            const handleBlur = () => {\n                if (!this.isPressing)\n                    return;\n                fireSyntheticPointerEvent(\"cancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo));\n            };\n            const removeBlurListener = addDomEvent(this.node.current, \"blur\", handleBlur);\n            this.removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);\n        };\n    }\n    startPress(event, info) {\n        this.isPressing = true;\n        const { onTapStart, whileTap } = this.node.getProps();\n        /**\n         * Ensure we trigger animations before firing event callback\n         */\n        if (whileTap && this.node.animationState) {\n            this.node.animationState.setActive(\"whileTap\", true);\n        }\n        if (onTapStart) {\n            frame.postRender(() => onTapStart(event, info));\n        }\n    }\n    checkPressEnd() {\n        this.removeEndListeners();\n        this.isPressing = false;\n        const props = this.node.getProps();\n        if (props.whileTap && this.node.animationState) {\n            this.node.animationState.setActive(\"whileTap\", false);\n        }\n        return !isDragActive();\n    }\n    cancelPress(event, info) {\n        if (!this.checkPressEnd())\n            return;\n        const { onTapCancel } = this.node.getProps();\n        if (onTapCancel) {\n            frame.postRender(() => onTapCancel(event, info));\n        }\n    }\n    mount() {\n        const props = this.node.getProps();\n        const removePointerListener = addPointerEvent(props.globalTapTarget ? window : this.node.current, \"pointerdown\", this.startPointerPress, {\n            passive: !(props.onTapStart ||\n                props[\"onPointerStart\"]),\n        });\n        const removeFocusListener = addDomEvent(this.node.current, \"focus\", this.startAccessiblePress);\n        this.removeStartListeners = pipe(removePointerListener, removeFocusListener);\n    }\n    unmount() {\n        this.removeStartListeners();\n        this.removeEndListeners();\n        this.removeAccessibleListeners();\n    }\n}\n\nexport { PressGesture };\n","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n    const callback = observerCallbacks.get(entry.target);\n    callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n    entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n    const lookupRoot = root || document;\n    /**\n     * If we don't have an observer lookup map for this root, create one.\n     */\n    if (!observers.has(lookupRoot)) {\n        observers.set(lookupRoot, {});\n    }\n    const rootObservers = observers.get(lookupRoot);\n    const key = JSON.stringify(options);\n    /**\n     * If we don't have an observer for this combination of root and settings,\n     * create one.\n     */\n    if (!rootObservers[key]) {\n        rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n    }\n    return rootObservers[key];\n}\nfunction observeIntersection(element, options, callback) {\n    const rootInteresectionObserver = initIntersectionObserver(options);\n    observerCallbacks.set(element, callback);\n    rootInteresectionObserver.observe(element);\n    return () => {\n        observerCallbacks.delete(element);\n        rootInteresectionObserver.unobserve(element);\n    };\n}\n\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n    some: 0,\n    all: 1,\n};\nclass InViewFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.hasEnteredView = false;\n        this.isInView = false;\n    }\n    startObserver() {\n        this.unmount();\n        const { viewport = {} } = this.node.getProps();\n        const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n        const options = {\n            root: root ? root.current : undefined,\n            rootMargin,\n            threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n        };\n        const onIntersectionUpdate = (entry) => {\n            const { isIntersecting } = entry;\n            /**\n             * If there's been no change in the viewport state, early return.\n             */\n            if (this.isInView === isIntersecting)\n                return;\n            this.isInView = isIntersecting;\n            /**\n             * Handle hasEnteredView. If this is only meant to run once, and\n             * element isn't visible, early return. Otherwise set hasEnteredView to true.\n             */\n            if (once && !isIntersecting && this.hasEnteredView) {\n                return;\n            }\n            else if (isIntersecting) {\n                this.hasEnteredView = true;\n            }\n            if (this.node.animationState) {\n                this.node.animationState.setActive(\"whileInView\", isIntersecting);\n            }\n            /**\n             * Use the latest committed props rather than the ones in scope\n             * when this observer is created\n             */\n            const { onViewportEnter, onViewportLeave } = this.node.getProps();\n            const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n            callback && callback(entry);\n        };\n        return observeIntersection(this.node.current, options, onIntersectionUpdate);\n    }\n    mount() {\n        this.startObserver();\n    }\n    update() {\n        if (typeof IntersectionObserver === \"undefined\")\n            return;\n        const { props, prevProps } = this.node;\n        const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n        if (hasOptionsChanged) {\n            this.startObserver();\n        }\n    }\n    unmount() { }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n    return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst gestureAnimations = {\n    inView: {\n        Feature: InViewFeature,\n    },\n    tap: {\n        Feature: PressGesture,\n    },\n    focus: {\n        Feature: FocusGesture,\n    },\n    hover: {\n        Feature: HoverGesture,\n    },\n};\n\nexport { gestureAnimations };\n","import { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\nclass FocusGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.isActive = false;\n    }\n    onFocus() {\n        let isFocusVisible = false;\n        /**\n         * If this element doesn't match focus-visible then don't\n         * apply whileHover. But, if matches throws that focus-visible\n         * is not a valid selector then in that browser outline styles will be applied\n         * to the element by default and we want to match that behaviour with whileFocus.\n         */\n        try {\n            isFocusVisible = this.node.current.matches(\":focus-visible\");\n        }\n        catch (e) {\n            isFocusVisible = true;\n        }\n        if (!isFocusVisible || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", true);\n        this.isActive = true;\n    }\n    onBlur() {\n        if (!this.isActive || !this.node.animationState)\n            return;\n        this.node.animationState.setActive(\"whileFocus\", false);\n        this.isActive = false;\n    }\n    mount() {\n        this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n    }\n    unmount() { }\n}\n\nexport { FocusGesture };\n","function shallowCompare(next, prev) {\n    if (!Array.isArray(prev))\n        return false;\n    const prevLength = prev.length;\n    if (prevLength !== next.length)\n        return false;\n    for (let i = 0; i < prevLength; i++) {\n        if (prev[i] !== next[i])\n            return false;\n    }\n    return true;\n}\n\nexport { shallowCompare };\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n    const props = visualElement.getProps();\n    return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","import { transformProps } from '../../render/html/utils/transform.mjs';\n\nconst underDampedSpring = {\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n    restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n    type: \"spring\",\n    stiffness: 550,\n    damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n    restSpeed: 10,\n});\nconst keyframesTransition = {\n    type: \"keyframes\",\n    duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n    type: \"keyframes\",\n    ease: [0.25, 0.1, 0.35, 1],\n    duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n    if (keyframes.length > 2) {\n        return keyframesTransition;\n    }\n    else if (transformProps.has(valueKey)) {\n        return valueKey.startsWith(\"scale\")\n            ? criticallyDampedSpring(keyframes[1])\n            : underDampedSpring;\n    }\n    return ease;\n};\n\nexport { getDefaultTransition };\n","/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n    return !!Object.keys(transition).length;\n}\nfunction getValueTransition(transition, key) {\n    return (transition[key] ||\n        transition[\"default\"] ||\n        transition);\n}\n\nexport { getValueTransition, isTransitionDefined };\n","const instantAnimationState = {\n    current: false,\n};\n\nexport { instantAnimationState };\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe) {\n    const resolvedKeyframes = keyframes.filter(isNotNull);\n    const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n        ? 0\n        : resolvedKeyframes.length - 1;\n    return !index || finalKeyframe === undefined\n        ? resolvedKeyframes[index]\n        : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n","import { MotionGlobalConfig } from '../utils/GlobalConfig.mjs';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n    now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n    now: () => {\n        if (now === undefined) {\n            time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n                ? frameData.timestamp\n                : performance.now());\n        }\n        return now;\n    },\n    set: (newTime) => {\n        now = newTime;\n        queueMicrotask(clearTime);\n    },\n};\n\nexport { time };\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n","import { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\n\nfunction isNone(value) {\n    if (typeof value === \"number\") {\n        return value === 0;\n    }\n    else if (value !== null) {\n        return value === \"none\" || value === \"0\" || isZeroValueString(value);\n    }\n    else {\n        return true;\n    }\n}\n\nexport { isNone };\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n","import { invariant } from '../../../utils/errors.mjs';\nimport { isNumericalString } from '../../../utils/is-numerical-string.mjs';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n    const match = splitCSSVariableRegex.exec(current);\n    if (!match)\n        return [,];\n    const [, token1, token2, fallback] = match;\n    return [`--${token1 !== null && token1 !== void 0 ? token1 : token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n    invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`);\n    const [token, fallback] = parseCSSVariable(current);\n    // No CSS variable detected\n    if (!token)\n        return;\n    // Attempt to read this CSS variable off the element\n    const resolved = window.getComputedStyle(element).getPropertyValue(token);\n    if (resolved) {\n        const trimmed = resolved.trim();\n        return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n    }\n    return isCSSVariableToken(fallback)\n        ? getVariableValue(fallback, element, depth + 1)\n        : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n","import { transformPropOrder } from '../../html/utils/transform.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst positionalKeys = new Set([\n    \"width\",\n    \"height\",\n    \"top\",\n    \"left\",\n    \"right\",\n    \"bottom\",\n    \"x\",\n    \"y\",\n    \"translateX\",\n    \"translateY\",\n]);\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n    if (transform === \"none\" || !transform)\n        return 0;\n    const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/u);\n    if (matrix3d) {\n        return getPosFromMatrix(matrix3d[1], pos3);\n    }\n    else {\n        const matrix = transform.match(/^matrix\\((.+)\\)$/u);\n        if (matrix) {\n            return getPosFromMatrix(matrix[1], pos2);\n        }\n        else {\n            return 0;\n        }\n    }\n};\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n    const removedTransforms = [];\n    nonTranslationalTransformKeys.forEach((key) => {\n        const value = visualElement.getValue(key);\n        if (value !== undefined) {\n            removedTransforms.push([key, value.get()]);\n            value.set(key.startsWith(\"scale\") ? 1 : 0);\n        }\n    });\n    return removedTransforms;\n}\nconst positionalValues = {\n    // Dimensions\n    width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n    height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\n    top: (_bbox, { top }) => parseFloat(top),\n    left: (_bbox, { left }) => parseFloat(left),\n    bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n    right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n    // Transform\n    x: getTranslateFromMatrix(4, 13),\n    y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalKeys, positionalValues, removeNonTranslationalTransform };\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';\nimport { testValueType } from './test.mjs';\nimport { auto } from './type-auto.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n    test: (v) => v === \"auto\",\n    parse: (v) => v,\n};\n\nexport { auto };\n","import { removeNonTranslationalTransform } from '../dom/utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nfunction measureAllKeyframes() {\n    if (anyNeedsMeasurement) {\n        const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n        const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n        const transformsToRestore = new Map();\n        /**\n         * Write pass\n         * If we're measuring elements we want to remove bounding box-changing transforms.\n         */\n        elementsToMeasure.forEach((element) => {\n            const removedTransforms = removeNonTranslationalTransform(element);\n            if (!removedTransforms.length)\n                return;\n            transformsToRestore.set(element, removedTransforms);\n            element.render();\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n        // Write\n        elementsToMeasure.forEach((element) => {\n            element.render();\n            const restore = transformsToRestore.get(element);\n            if (restore) {\n                restore.forEach(([key, value]) => {\n                    var _a;\n                    (_a = element.getValue(key)) === null || _a === void 0 ? void 0 : _a.set(value);\n                });\n            }\n        });\n        // Read\n        resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n        // Write\n        resolversToMeasure.forEach((resolver) => {\n            if (resolver.suspendedScrollY !== undefined) {\n                window.scrollTo(0, resolver.suspendedScrollY);\n            }\n        });\n    }\n    anyNeedsMeasurement = false;\n    isScheduled = false;\n    toResolve.forEach((resolver) => resolver.complete());\n    toResolve.clear();\n}\nfunction readAllKeyframes() {\n    toResolve.forEach((resolver) => {\n        resolver.readKeyframes();\n        if (resolver.needsMeasurement) {\n            anyNeedsMeasurement = true;\n        }\n    });\n}\nfunction flushKeyframeResolvers() {\n    readAllKeyframes();\n    measureAllKeyframes();\n}\nclass KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n        /**\n         * Track whether this resolver has completed. Once complete, it never\n         * needs to attempt keyframe resolution again.\n         */\n        this.isComplete = false;\n        /**\n         * Track whether this resolver is async. If it is, it'll be added to the\n         * resolver queue and flushed in the next frame. Resolvers that aren't going\n         * to trigger read/write thrashing don't need to be async.\n         */\n        this.isAsync = false;\n        /**\n         * Track whether this resolver needs to perform a measurement\n         * to resolve its keyframes.\n         */\n        this.needsMeasurement = false;\n        /**\n         * Track whether this resolver is currently scheduled to resolve\n         * to allow it to be cancelled and resumed externally.\n         */\n        this.isScheduled = false;\n        this.unresolvedKeyframes = [...unresolvedKeyframes];\n        this.onComplete = onComplete;\n        this.name = name;\n        this.motionValue = motionValue;\n        this.element = element;\n        this.isAsync = isAsync;\n    }\n    scheduleResolve() {\n        this.isScheduled = true;\n        if (this.isAsync) {\n            toResolve.add(this);\n            if (!isScheduled) {\n                isScheduled = true;\n                frame.read(readAllKeyframes);\n                frame.resolveKeyframes(measureAllKeyframes);\n            }\n        }\n        else {\n            this.readKeyframes();\n            this.complete();\n        }\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, name, element, motionValue } = this;\n        /**\n         * If a keyframe is null, we hydrate it either by reading it from\n         * the instance, or propagating from previous keyframes.\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (unresolvedKeyframes[i] === null) {\n                /**\n                 * If the first keyframe is null, we need to find its value by sampling the element\n                 */\n                if (i === 0) {\n                    const currentValue = motionValue === null || motionValue === void 0 ? void 0 : motionValue.get();\n                    const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n                    if (currentValue !== undefined) {\n                        unresolvedKeyframes[0] = currentValue;\n                    }\n                    else if (element && name) {\n                        const valueAsRead = element.readValue(name, finalKeyframe);\n                        if (valueAsRead !== undefined && valueAsRead !== null) {\n                            unresolvedKeyframes[0] = valueAsRead;\n                        }\n                    }\n                    if (unresolvedKeyframes[0] === undefined) {\n                        unresolvedKeyframes[0] = finalKeyframe;\n                    }\n                    if (motionValue && currentValue === undefined) {\n                        motionValue.set(unresolvedKeyframes[0]);\n                    }\n                }\n                else {\n                    unresolvedKeyframes[i] = unresolvedKeyframes[i - 1];\n                }\n            }\n        }\n    }\n    setFinalKeyframe() { }\n    measureInitialState() { }\n    renderEndStyles() { }\n    measureEndState() { }\n    complete() {\n        this.isComplete = true;\n        this.onComplete(this.unresolvedKeyframes, this.finalKeyframe);\n        toResolve.delete(this);\n    }\n    cancel() {\n        if (!this.isComplete) {\n            this.isScheduled = false;\n            toResolve.delete(this);\n        }\n    }\n    resume() {\n        if (!this.isComplete)\n            this.scheduleResolve();\n    }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n","import { isString, singleColorRegex, floatRegex } from '../utils.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n    return Boolean((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||\n        (testProp && Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n    if (!isString(v))\n        return v;\n    const [a, b, c, alpha] = v.match(floatRegex);\n    return {\n        [aName]: parseFloat(a),\n        [bName]: parseFloat(b),\n        [cName]: parseFloat(c),\n        alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n    };\n};\n\nexport { isColorString, splitColor };\n","import { clamp } from '../../../utils/clamp.mjs';\nimport { alpha, number } from '../numbers/index.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n    ...number,\n    transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n    test: isColorString(\"rgb\", \"red\"),\n    parse: splitColor(\"red\", \"green\", \"blue\"),\n    transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n        rgbUnit.transform(red) +\n        \", \" +\n        rgbUnit.transform(green) +\n        \", \" +\n        rgbUnit.transform(blue) +\n        \", \" +\n        sanitize(alpha.transform(alpha$1)) +\n        \")\",\n};\n\nexport { rgbUnit, rgba };\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n    let r = \"\";\n    let g = \"\";\n    let b = \"\";\n    let a = \"\";\n    // If we have 6 characters, ie #FF0000\n    if (v.length > 5) {\n        r = v.substring(1, 3);\n        g = v.substring(3, 5);\n        b = v.substring(5, 7);\n        a = v.substring(7, 9);\n        // Or we have 3 characters, ie #F00\n    }\n    else {\n        r = v.substring(1, 2);\n        g = v.substring(2, 3);\n        b = v.substring(3, 4);\n        a = v.substring(4, 5);\n        r += r;\n        g += g;\n        b += b;\n        a += a;\n    }\n    return {\n        red: parseInt(r, 16),\n        green: parseInt(g, 16),\n        blue: parseInt(b, 16),\n        alpha: a ? parseInt(a, 16) / 255 : 1,\n    };\n}\nconst hex = {\n    test: isColorString(\"#\"),\n    parse: parseHex,\n    transform: rgba.transform,\n};\n\nexport { hex };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n    test: isColorString(\"hsl\", \"hue\"),\n    parse: splitColor(\"hue\", \"saturation\", \"lightness\"),\n    transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n        return (\"hsla(\" +\n            Math.round(hue) +\n            \", \" +\n            percent.transform(sanitize(saturation)) +\n            \", \" +\n            percent.transform(sanitize(lightness)) +\n            \", \" +\n            sanitize(alpha.transform(alpha$1)) +\n            \")\");\n    },\n};\n\nexport { hsla };\n","import { isString } from '../utils.mjs';\nimport { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n    test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n    parse: (v) => {\n        if (rgba.test(v)) {\n            return rgba.parse(v);\n        }\n        else if (hsla.test(v)) {\n            return hsla.parse(v);\n        }\n        else {\n            return hex.parse(v);\n        }\n    },\n    transform: (v) => {\n        return isString(v)\n            ? v\n            : v.hasOwnProperty(\"red\")\n                ? rgba.transform(v)\n                : hsla.transform(v);\n    },\n};\n\nexport { color };\n","import { color } from '../color/index.mjs';\nimport { isString, floatRegex, colorRegex, sanitize } from '../utils.mjs';\n\nfunction test(v) {\n    var _a, _b;\n    return (isNaN(v) &&\n        isString(v) &&\n        (((_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) || 0) +\n            (((_b = v.match(colorRegex)) === null || _b === void 0 ? void 0 : _b.length) || 0) >\n            0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n    const originalValue = value.toString();\n    const values = [];\n    const indexes = {\n        color: [],\n        number: [],\n        var: [],\n    };\n    const types = [];\n    let i = 0;\n    const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n        if (color.test(parsedValue)) {\n            indexes.color.push(i);\n            types.push(COLOR_TOKEN);\n            values.push(color.parse(parsedValue));\n        }\n        else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n            indexes.var.push(i);\n            types.push(VAR_TOKEN);\n            values.push(parsedValue);\n        }\n        else {\n            indexes.number.push(i);\n            types.push(NUMBER_TOKEN);\n            values.push(parseFloat(parsedValue));\n        }\n        ++i;\n        return SPLIT_TOKEN;\n    });\n    const split = tokenised.split(SPLIT_TOKEN);\n    return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n    return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n    const { split, types } = analyseComplexValue(source);\n    const numSections = split.length;\n    return (v) => {\n        let output = \"\";\n        for (let i = 0; i < numSections; i++) {\n            output += split[i];\n            if (v[i] !== undefined) {\n                const type = types[i];\n                if (type === NUMBER_TOKEN) {\n                    output += sanitize(v[i]);\n                }\n                else if (type === COLOR_TOKEN) {\n                    output += color.transform(v[i]);\n                }\n                else {\n                    output += v[i];\n                }\n            }\n        }\n        return output;\n    };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n    const parsed = parseComplexValue(v);\n    const transformer = createTransformer(v);\n    return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n    test,\n    parse: parseComplexValue,\n    createTransformer,\n    getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n    const [name, value] = v.slice(0, -1).split(\"(\");\n    if (name === \"drop-shadow\")\n        return v;\n    const [number] = value.match(floatRegex) || [];\n    if (!number)\n        return v;\n    const unit = value.replace(number, \"\");\n    let defaultValue = maxDefaults.has(name) ? 1 : 0;\n    if (number !== value)\n        defaultValue *= 100;\n    return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n    ...complex,\n    getAnimatableNone: (v) => {\n        const functions = v.match(functionRegex);\n        return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n    },\n};\n\nexport { filter };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n    ...numberValueTypes,\n    // Color props\n    color,\n    backgroundColor: color,\n    outlineColor: color,\n    fill: color,\n    stroke: color,\n    // Border props\n    borderColor: color,\n    borderTopColor: color,\n    borderRightColor: color,\n    borderBottomColor: color,\n    borderLeftColor: color,\n    filter,\n    WebkitFilter: filter,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n","import { complex } from '../../../value/types/complex/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { getDefaultValueType } from './defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n    let defaultValueType = getDefaultValueType(key);\n    if (defaultValueType !== filter)\n        defaultValueType = complex;\n    // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n    return defaultValueType.getAnimatableNone\n        ? defaultValueType.getAnimatableNone(value)\n        : undefined;\n}\n\nexport { getAnimatableNone };\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../dom/value-types/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n    let i = 0;\n    let animatableTemplate = undefined;\n    while (i < unresolvedKeyframes.length && !animatableTemplate) {\n        const keyframe = unresolvedKeyframes[i];\n        if (typeof keyframe === \"string\" &&\n            !invalidTemplates.has(keyframe) &&\n            analyseComplexValue(keyframe).values.length) {\n            animatableTemplate = unresolvedKeyframes[i];\n        }\n        i++;\n    }\n    if (animatableTemplate && name) {\n        for (const noneIndex of noneKeyframeIndexes) {\n            unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n        }\n    }\n}\n\nexport { makeNoneKeyframesAnimatable };\n","import { isNone } from '../../animation/utils/is-none.mjs';\nimport { getVariableValue } from './utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken } from './utils/is-css-variable.mjs';\nimport { positionalKeys, isNumOrPxType, positionalValues } from './utils/unit-conversion.mjs';\nimport { findDimensionValueType } from './value-types/dimensions.mjs';\nimport { KeyframeResolver } from '../utils/KeyframesResolver.mjs';\nimport { makeNoneKeyframesAnimatable } from '../html/utils/make-none-animatable.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n    constructor(unresolvedKeyframes, onComplete, name, motionValue) {\n        super(unresolvedKeyframes, onComplete, name, motionValue, motionValue === null || motionValue === void 0 ? void 0 : motionValue.owner, true);\n    }\n    readKeyframes() {\n        const { unresolvedKeyframes, element, name } = this;\n        if (!element.current)\n            return;\n        super.readKeyframes();\n        /**\n         * If any keyframe is a CSS variable, we need to find its value by sampling the element\n         */\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            let keyframe = unresolvedKeyframes[i];\n            if (typeof keyframe === \"string\") {\n                keyframe = keyframe.trim();\n                if (isCSSVariableToken(keyframe)) {\n                    const resolved = getVariableValue(keyframe, element.current);\n                    if (resolved !== undefined) {\n                        unresolvedKeyframes[i] = resolved;\n                    }\n                    if (i === unresolvedKeyframes.length - 1) {\n                        this.finalKeyframe = keyframe;\n                    }\n                }\n            }\n        }\n        /**\n         * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n         * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n         * have a far bigger performance impact.\n         */\n        this.resolveNoneKeyframes();\n        /**\n         * Check to see if unit type has changed. If so schedule jobs that will\n         * temporarily set styles to the destination keyframes.\n         * Skip if we have more than two keyframes or this isn't a positional value.\n         * TODO: We can throw if there are multiple keyframes and the value type changes.\n         */\n        if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n            return;\n        }\n        const [origin, target] = unresolvedKeyframes;\n        const originType = findDimensionValueType(origin);\n        const targetType = findDimensionValueType(target);\n        /**\n         * Either we don't recognise these value types or we can animate between them.\n         */\n        if (originType === targetType)\n            return;\n        /**\n         * If both values are numbers or pixels, we can animate between them by\n         * converting them to numbers.\n         */\n        if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n            for (let i = 0; i < unresolvedKeyframes.length; i++) {\n                const value = unresolvedKeyframes[i];\n                if (typeof value === \"string\") {\n                    unresolvedKeyframes[i] = parseFloat(value);\n                }\n            }\n        }\n        else {\n            /**\n             * Else, the only way to resolve this is by measuring the element.\n             */\n            this.needsMeasurement = true;\n        }\n    }\n    resolveNoneKeyframes() {\n        const { unresolvedKeyframes, name } = this;\n        const noneKeyframeIndexes = [];\n        for (let i = 0; i < unresolvedKeyframes.length; i++) {\n            if (isNone(unresolvedKeyframes[i])) {\n                noneKeyframeIndexes.push(i);\n            }\n        }\n        if (noneKeyframeIndexes.length) {\n            makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n        }\n    }\n    measureInitialState() {\n        const { element, unresolvedKeyframes, name } = this;\n        if (!element.current)\n            return;\n        if (name === \"height\") {\n            this.suspendedScrollY = window.pageYOffset;\n        }\n        this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        unresolvedKeyframes[0] = this.measuredOrigin;\n        // Set final key frame to measure after next render\n        const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n        if (measureKeyframe !== undefined) {\n            element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n        }\n    }\n    measureEndState() {\n        var _a;\n        const { element, name, unresolvedKeyframes } = this;\n        if (!element.current)\n            return;\n        const value = element.getValue(name);\n        value && value.jump(this.measuredOrigin, false);\n        const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n        const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n        unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n        if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n            this.finalKeyframe = finalKeyframe;\n        }\n        // If we removed transform values, reapply them before the next render\n        if ((_a = this.removedTransforms) === null || _a === void 0 ? void 0 : _a.length) {\n            this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n                element\n                    .getValue(unsetTransformName)\n                    .set(unsetTransformValue);\n            });\n        }\n        this.resolveNoneKeyframes();\n    }\n}\n\nexport { DOMKeyframesResolver };\n","function memo(callback) {\n    let result;\n    return () => {\n        if (result === undefined)\n            result = callback();\n        return result;\n    };\n}\n\nexport { memo };\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n    // If the list of keys tat might be non-animatable grows, replace with Set\n    if (name === \"zIndex\")\n        return false;\n    // If it's a number or a keyframes array, we can animate it. We might at some point\n    // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n    // but for now lets leave it like this for performance reasons\n    if (typeof value === \"number\" || Array.isArray(value))\n        return true;\n    if (typeof value === \"string\" && // It's animatable if we have a string\n        (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n        !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n    ) {\n        return true;\n    }\n    return false;\n};\n\nexport { isAnimatable };\n","import { flushKeyframeResolvers } from '../../render/utils/KeyframesResolver.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\nclass BaseAnimation {\n    constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", ...options }) {\n        // Track whether the animation has been stopped. Stopped animations won't restart.\n        this.isStopped = false;\n        this.hasAttemptedResolve = false;\n        this.options = {\n            autoplay,\n            delay,\n            type,\n            repeat,\n            repeatDelay,\n            repeatType,\n            ...options,\n        };\n        this.updateFinishedPromise();\n    }\n    /**\n     * A getter for resolved data. If keyframes are not yet resolved, accessing\n     * this.resolved will synchronously flush all pending keyframe resolvers.\n     * This is a deoptimisation, but at its worst still batches read/writes.\n     */\n    get resolved() {\n        if (!this._resolved && !this.hasAttemptedResolve) {\n            flushKeyframeResolvers();\n        }\n        return this._resolved;\n    }\n    /**\n     * A method to be called when the keyframes resolver completes. This method\n     * will check if its possible to run the animation and, if not, skip it.\n     * Otherwise, it will call initPlayback on the implementing class.\n     */\n    onKeyframesResolved(keyframes, finalKeyframe) {\n        this.hasAttemptedResolve = true;\n        const { name, type, velocity, delay, onComplete, onUpdate, isGenerator, } = this.options;\n        /**\n         * If we can't animate this value with the resolved keyframes\n         * then we should complete it immediately.\n         */\n        if (!isGenerator && !canAnimate(keyframes, name, type, velocity)) {\n            // Finish immediately\n            if (instantAnimationState.current || !delay) {\n                onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n                onComplete === null || onComplete === void 0 ? void 0 : onComplete();\n                this.resolveFinishedPromise();\n                return;\n            }\n            // Finish after a delay\n            else {\n                this.options.duration = 0;\n            }\n        }\n        const resolvedAnimation = this.initPlayback(keyframes, finalKeyframe);\n        if (resolvedAnimation === false)\n            return;\n        this._resolved = {\n            keyframes,\n            finalKeyframe,\n            ...resolvedAnimation,\n        };\n        this.onPostResolved();\n    }\n    onPostResolved() { }\n    /**\n     * Allows the returned animation to be awaited or promise-chained. Currently\n     * resolves when the animation finishes at all but in a future update could/should\n     * reject if its cancels.\n     */\n    then(resolve, reject) {\n        return this.currentFinishedPromise.then(resolve, reject);\n    }\n    updateFinishedPromise() {\n        this.currentFinishedPromise = new Promise((resolve) => {\n            this.resolveFinishedPromise = resolve;\n        });\n    }\n}\n\nexport { BaseAnimation };\n","import { warning } from '../../../utils/errors.mjs';\nimport { isAnimatable } from '../../utils/is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n    const current = keyframes[0];\n    if (keyframes.length === 1)\n        return true;\n    for (let i = 0; i < keyframes.length; i++) {\n        if (keyframes[i] !== current)\n            return true;\n    }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n    /**\n     * Check if we're able to animate between the start and end keyframes,\n     * and throw a warning if we're attempting to animate between one that's\n     * animatable and another that isn't.\n     */\n    const originKeyframe = keyframes[0];\n    if (originKeyframe === null)\n        return false;\n    /**\n     * These aren't traditionally animatable but we do support them.\n     * In future we could look into making this more generic or replacing\n     * this function with mix() === mixImmediate\n     */\n    if (name === \"display\" || name === \"visibility\")\n        return true;\n    const targetKeyframe = keyframes[keyframes.length - 1];\n    const isOriginAnimatable = isAnimatable(originKeyframe, name);\n    const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n    warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n    // Always skip if any of these are true\n    if (!isOriginAnimatable || !isTargetAnimatable) {\n        return false;\n    }\n    return hasKeyframesChanged(keyframes) || (type === \"spring\" && velocity);\n}\n\nexport { canAnimate };\n","/*\n  Convert velocity into velocity per second\n\n  @param [number]: Unit per frame\n  @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n    return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n","import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n    const prevT = Math.max(t - velocitySampleDuration, 0);\n    return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","import { warning } from '../../../utils/errors.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n    let envelope;\n    let derivative;\n    warning(duration <= secondsToMilliseconds(maxDuration), \"Spring duration must be 10 seconds or less\");\n    let dampingRatio = 1 - bounce;\n    /**\n     * Restrict dampingRatio and duration to within acceptable ranges.\n     */\n    dampingRatio = clamp(minDamping, maxDamping, dampingRatio);\n    duration = clamp(minDuration, maxDuration, millisecondsToSeconds(duration));\n    if (dampingRatio < 1) {\n        /**\n         * Underdamped spring\n         */\n        envelope = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const a = exponentialDecay - velocity;\n            const b = calcAngularFreq(undampedFreq, dampingRatio);\n            const c = Math.exp(-delta);\n            return safeMin - (a / b) * c;\n        };\n        derivative = (undampedFreq) => {\n            const exponentialDecay = undampedFreq * dampingRatio;\n            const delta = exponentialDecay * duration;\n            const d = delta * velocity + velocity;\n            const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n            const f = Math.exp(-delta);\n            const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n            const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n            return (factor * ((d - e) * f)) / g;\n        };\n    }\n    else {\n        /**\n         * Critically-damped spring\n         */\n        envelope = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (undampedFreq - velocity) * duration + 1;\n            return -safeMin + a * b;\n        };\n        derivative = (undampedFreq) => {\n            const a = Math.exp(-undampedFreq * duration);\n            const b = (velocity - undampedFreq) * (duration * duration);\n            return a * b;\n        };\n    }\n    const initialGuess = 5 / duration;\n    const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n    duration = secondsToMilliseconds(duration);\n    if (isNaN(undampedFreq)) {\n        return {\n            stiffness: 100,\n            damping: 10,\n            duration,\n        };\n    }\n    else {\n        const stiffness = Math.pow(undampedFreq, 2) * mass;\n        return {\n            stiffness,\n            damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n            duration,\n        };\n    }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n    let result = initialGuess;\n    for (let i = 1; i < rootIterations; i++) {\n        result = result - envelope(result) / derivative(result);\n    }\n    return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n    return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };\n","import { millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n    return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n    let springOptions = {\n        velocity: 0.0,\n        stiffness: 100,\n        damping: 10,\n        mass: 1.0,\n        isResolvedFromDuration: false,\n        ...options,\n    };\n    // stiffness/damping/mass overrides duration/bounce\n    if (!isSpringType(options, physicsKeys) &&\n        isSpringType(options, durationKeys)) {\n        const derived = findSpring(options);\n        springOptions = {\n            ...springOptions,\n            ...derived,\n            mass: 1.0,\n        };\n        springOptions.isResolvedFromDuration = true;\n    }\n    return springOptions;\n}\nfunction spring({ keyframes, restDelta, restSpeed, ...options }) {\n    const origin = keyframes[0];\n    const target = keyframes[keyframes.length - 1];\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = { done: false, value: origin };\n    const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n        ...options,\n        velocity: -millisecondsToSeconds(options.velocity || 0),\n    });\n    const initialVelocity = velocity || 0.0;\n    const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n    const initialDelta = target - origin;\n    const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n    /**\n     * If we're working on a granular scale, use smaller defaults for determining\n     * when the spring is finished.\n     *\n     * These defaults have been selected emprically based on what strikes a good\n     * ratio between feeling good and finishing as soon as changes are imperceptible.\n     */\n    const isGranularScale = Math.abs(initialDelta) < 5;\n    restSpeed || (restSpeed = isGranularScale ? 0.01 : 2);\n    restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);\n    let resolveSpring;\n    if (dampingRatio < 1) {\n        const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n        // Underdamped spring\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            return (target -\n                envelope *\n                    (((initialVelocity +\n                        dampingRatio * undampedAngularFreq * initialDelta) /\n                        angularFreq) *\n                        Math.sin(angularFreq * t) +\n                        initialDelta * Math.cos(angularFreq * t)));\n        };\n    }\n    else if (dampingRatio === 1) {\n        // Critically damped spring\n        resolveSpring = (t) => target -\n            Math.exp(-undampedAngularFreq * t) *\n                (initialDelta +\n                    (initialVelocity + undampedAngularFreq * initialDelta) * t);\n    }\n    else {\n        // Overdamped spring\n        const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n        resolveSpring = (t) => {\n            const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n            // When performing sinh or cosh values can hit Infinity so we cap them here\n            const freqForT = Math.min(dampedAngularFreq * t, 300);\n            return (target -\n                (envelope *\n                    ((initialVelocity +\n                        dampingRatio * undampedAngularFreq * initialDelta) *\n                        Math.sinh(freqForT) +\n                        dampedAngularFreq *\n                            initialDelta *\n                            Math.cosh(freqForT))) /\n                    dampedAngularFreq);\n        };\n    }\n    return {\n        calculatedDuration: isResolvedFromDuration ? duration || null : null,\n        next: (t) => {\n            const current = resolveSpring(t);\n            if (!isResolvedFromDuration) {\n                let currentVelocity = initialVelocity;\n                if (t !== 0) {\n                    /**\n                     * We only need to calculate velocity for under-damped springs\n                     * as over- and critically-damped springs can't overshoot, so\n                     * checking only for displacement is enough.\n                     */\n                    if (dampingRatio < 1) {\n                        currentVelocity = calcGeneratorVelocity(resolveSpring, t, current);\n                    }\n                    else {\n                        currentVelocity = 0;\n                    }\n                }\n                const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n                const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n                state.done =\n                    isBelowVelocityThreshold && isBelowDisplacementThreshold;\n            }\n            else {\n                state.done = t >= duration;\n            }\n            state.value = state.done ? target : current;\n            return state;\n        },\n    };\n}\n\nexport { spring };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n    const origin = keyframes[0];\n    const state = {\n        done: false,\n        value: origin,\n    };\n    const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n    const nearestBoundary = (v) => {\n        if (min === undefined)\n            return max;\n        if (max === undefined)\n            return min;\n        return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n    };\n    let amplitude = power * velocity;\n    const ideal = origin + amplitude;\n    const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n    /**\n     * If the target has changed we need to re-calculate the amplitude, otherwise\n     * the animation will start from the wrong position.\n     */\n    if (target !== ideal)\n        amplitude = target - origin;\n    const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n    const calcLatest = (t) => target + calcDelta(t);\n    const applyFriction = (t) => {\n        const delta = calcDelta(t);\n        const latest = calcLatest(t);\n        state.done = Math.abs(delta) <= restDelta;\n        state.value = state.done ? target : latest;\n    };\n    /**\n     * Ideally this would resolve for t in a stateless way, we could\n     * do that by always precalculating the animation but as we know\n     * this will be done anyway we can assume that spring will\n     * be discovered during that.\n     */\n    let timeReachedBoundary;\n    let spring$1;\n    const checkCatchBoundary = (t) => {\n        if (!isOutOfBounds(state.value))\n            return;\n        timeReachedBoundary = t;\n        spring$1 = spring({\n            keyframes: [state.value, nearestBoundary(state.value)],\n            velocity: calcGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n            damping: bounceDamping,\n            stiffness: bounceStiffness,\n            restDelta,\n            restSpeed,\n        });\n    };\n    checkCatchBoundary(0);\n    return {\n        calculatedDuration: null,\n        next: (t) => {\n            /**\n             * We need to resolve the friction to figure out if we need a\n             * spring but we don't want to do this twice per frame. So here\n             * we flag if we updated for this frame and later if we did\n             * we can skip doing it again.\n             */\n            let hasUpdatedFrame = false;\n            if (!spring$1 && timeReachedBoundary === undefined) {\n                hasUpdatedFrame = true;\n                applyFriction(t);\n                checkCatchBoundary(t);\n            }\n            /**\n             * If we have a spring and the provided t is beyond the moment the friction\n             * animation crossed the min/max boundary, use the spring.\n             */\n            if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n                return spring$1.next(t - timeReachedBoundary);\n            }\n            else {\n                !hasUpdatedFrame && applyFriction(t);\n                return state;\n            }\n        },\n    };\n}\n\nexport { inertia };\n","import { noop } from '../utils/noop.mjs';\n\n/*\n  Bezier function generator\n  This has been modified from Gaëtan Renaudeau's BezierEasing\n  https://github.com/gre/bezier-easing/blob/master/src/index.js\n  https://github.com/gre/bezier-easing/blob/master/LICENSE\n  \n  I've removed the newtonRaphsonIterate algo because in benchmarking it\n  wasn't noticiably faster than binarySubdivision, indeed removing it\n  usually improved times, depending on the curve.\n  I also removed the lookup table, as for the added bundle size and loop we're\n  only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n  to 12 to compensate and this still tended to be faster for no perceivable\n  loss in accuracy.\n  Usage\n    const easeOut = cubicBezier(.17,.67,.83,.67);\n    const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n    t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n    let currentX;\n    let currentT;\n    let i = 0;\n    do {\n        currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - x;\n        if (currentX > 0.0) {\n            upperBound = currentT;\n        }\n        else {\n            lowerBound = currentT;\n        }\n    } while (Math.abs(currentX) > subdivisionPrecision &&\n        ++i < subdivisionMaxIterations);\n    return currentT;\n}\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n    // If this is a linear gradient, return linear easing\n    if (mX1 === mY1 && mX2 === mY2)\n        return noop;\n    const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n    // If animation is at start/end, return t without easing\n    return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = cubicBezier(0.42, 0, 1, 1);\nconst easeOut = cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = reverseEasing(backOut);\nconst backInOut = mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { invariant } from '../../utils/errors.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { anticipate } from '../anticipate.mjs';\n\nconst easingLookup = {\n    linear: noop,\n    easeIn,\n    easeInOut,\n    easeOut,\n    circIn,\n    circInOut,\n    circOut,\n    backIn,\n    backInOut,\n    backOut,\n    anticipate,\n};\nconst easingDefinitionToFunction = (definition) => {\n    if (Array.isArray(definition)) {\n        // If cubic bezier definition, create bezier curve\n        invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n        const [x1, y1, x2, y2] = definition;\n        return cubicBezier(x1, y1, x2, y2);\n    }\n    else if (typeof definition === \"string\") {\n        // Else lookup from table\n        invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n        return easingLookup[definition];\n    }\n    return definition;\n};\n\nexport { easingDefinitionToFunction };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","/*\n  Progress within given range\n\n  Given a lower limit and an upper limit, we return the progress\n  (expressed as a number 0-1) represented by the given value, and\n  limit that progress to within 0-1.\n\n  @param [number]: Lower limit\n  @param [number]: Upper limit\n  @param [number]: Value to find progress within given range\n  @return [number]: Progress of value within range as expressed 0-1\n*/\nconst progress = (from, to, value) => {\n    const toFromDifference = to - from;\n    return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","/*\n  Value in range from progress\n\n  Given a lower limit and an upper limit, we return the value within\n  that range as expressed by progress (usually a number from 0 to 1)\n\n  So progress = 0.5 would change\n\n  from -------- to\n\n  to\n\n  from ---- to\n\n  E.g. from = 10, to = 20, progress = 0.5 => 15\n\n  @param [number]: Lower limit of range\n  @param [number]: Upper limit of range\n  @param [number]: The progress between lower and upper limits expressed 0-1\n  @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n    return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n    if (t < 0)\n        t += 1;\n    if (t > 1)\n        t -= 1;\n    if (t < 1 / 6)\n        return p + (q - p) * 6 * t;\n    if (t < 1 / 2)\n        return q;\n    if (t < 2 / 3)\n        return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n    hue /= 360;\n    saturation /= 100;\n    lightness /= 100;\n    let red = 0;\n    let green = 0;\n    let blue = 0;\n    if (!saturation) {\n        red = green = blue = lightness;\n    }\n    else {\n        const q = lightness < 0.5\n            ? lightness * (1 + saturation)\n            : lightness + saturation - lightness * saturation;\n        const p = 2 * lightness - q;\n        red = hueToRgb(p, q, hue + 1 / 3);\n        green = hueToRgb(p, q, hue);\n        blue = hueToRgb(p, q, hue - 1 / 3);\n    }\n    return {\n        red: Math.round(red * 255),\n        green: Math.round(green * 255),\n        blue: Math.round(blue * 255),\n        alpha,\n    };\n}\n\nexport { hslaToRgba };\n","function mixImmediate(a, b) {\n    return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n","import { mixNumber } from './number.mjs';\nimport { warning } from '../errors.mjs';\nimport { hslaToRgba } from '../hsla-to-rgba.mjs';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n    const fromExpo = from * from;\n    const expo = v * (to * to - fromExpo) + fromExpo;\n    return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n    const type = getColorType(color);\n    warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n    if (!Boolean(type))\n        return false;\n    let model = type.parse(color);\n    if (type === hsla) {\n        // TODO Remove this cast - needed since Framer Motion's stricter typing\n        model = hslaToRgba(model);\n    }\n    return model;\n}\nconst mixColor = (from, to) => {\n    const fromRGBA = asRGBA(from);\n    const toRGBA = asRGBA(to);\n    if (!fromRGBA || !toRGBA) {\n        return mixImmediate(from, to);\n    }\n    const blended = { ...fromRGBA };\n    return (v) => {\n        blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n        blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n        blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n        blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n        return rgba.transform(blended);\n    };\n};\n\nexport { mixColor, mixLinearColor };\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n    if (invisibleValues.has(origin)) {\n        return (p) => (p <= 0 ? origin : target);\n    }\n    else {\n        return (p) => (p >= 1 ? target : origin);\n    }\n}\n\nexport { invisibleValues, mixVisibility };\n","import { mixNumber as mixNumber$1 } from './number.mjs';\nimport { mixColor } from './color.mjs';\nimport { pipe } from '../pipe.mjs';\nimport { warning } from '../errors.mjs';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { isCSSVariableToken } from '../../render/dom/utils/is-css-variable.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\nimport { mixImmediate } from './immediate.mjs';\n\nfunction mixNumber(a, b) {\n    return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n    if (typeof a === \"number\") {\n        return mixNumber;\n    }\n    else if (typeof a === \"string\") {\n        return isCSSVariableToken(a)\n            ? mixImmediate\n            : color.test(a)\n                ? mixColor\n                : mixComplex;\n    }\n    else if (Array.isArray(a)) {\n        return mixArray;\n    }\n    else if (typeof a === \"object\") {\n        return color.test(a) ? mixColor : mixObject;\n    }\n    return mixImmediate;\n}\nfunction mixArray(a, b) {\n    const output = [...a];\n    const numValues = output.length;\n    const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n    return (p) => {\n        for (let i = 0; i < numValues; i++) {\n            output[i] = blendValue[i](p);\n        }\n        return output;\n    };\n}\nfunction mixObject(a, b) {\n    const output = { ...a, ...b };\n    const blendValue = {};\n    for (const key in output) {\n        if (a[key] !== undefined && b[key] !== undefined) {\n            blendValue[key] = getMixer(a[key])(a[key], b[key]);\n        }\n    }\n    return (v) => {\n        for (const key in blendValue) {\n            output[key] = blendValue[key](v);\n        }\n        return output;\n    };\n}\nfunction matchOrder(origin, target) {\n    var _a;\n    const orderedOrigin = [];\n    const pointers = { color: 0, var: 0, number: 0 };\n    for (let i = 0; i < target.values.length; i++) {\n        const type = target.types[i];\n        const originIndex = origin.indexes[type][pointers[type]];\n        const originValue = (_a = origin.values[originIndex]) !== null && _a !== void 0 ? _a : 0;\n        orderedOrigin[i] = originValue;\n        pointers[type]++;\n    }\n    return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n    const template = complex.createTransformer(target);\n    const originStats = analyseComplexValue(origin);\n    const targetStats = analyseComplexValue(target);\n    const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n        originStats.indexes.color.length === targetStats.indexes.color.length &&\n        originStats.indexes.number.length >= targetStats.indexes.number.length;\n    if (canInterpolate) {\n        if ((invisibleValues.has(origin) &&\n            !targetStats.values.length) ||\n            (invisibleValues.has(target) &&\n                !originStats.values.length)) {\n            return mixVisibility(origin, target);\n        }\n        return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n    }\n    else {\n        warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);\n        return mixImmediate(origin, target);\n    }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n    if (typeof from === \"number\" &&\n        typeof to === \"number\" &&\n        typeof p === \"number\") {\n        return mixNumber(from, to, p);\n    }\n    const mixer = getMixer(from);\n    return mixer(from, to);\n}\n\nexport { mix };\n","import { invariant } from './errors.mjs';\nimport { clamp } from './clamp.mjs';\nimport { pipe } from './pipe.mjs';\nimport { progress } from './progress.mjs';\nimport { noop } from './noop.mjs';\nimport { mix } from './mix/index.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n    const mixers = [];\n    const mixerFactory = customMixer || mix;\n    const numMixers = output.length - 1;\n    for (let i = 0; i < numMixers; i++) {\n        let mixer = mixerFactory(output[i], output[i + 1]);\n        if (ease) {\n            const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n            mixer = pipe(easingFunction, mixer);\n        }\n        mixers.push(mixer);\n    }\n    return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n *   - Numbers\n *   - Colors (hex, hsl, hsla, rgb, rgba)\n *   - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revist this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n    const inputLength = input.length;\n    invariant(inputLength === output.length, \"Both input and output ranges must be the same length\");\n    /**\n     * If we're only provided a single input, we can just make a function\n     * that returns the output.\n     */\n    if (inputLength === 1)\n        return () => output[0];\n    if (inputLength === 2 && input[0] === input[1])\n        return () => output[1];\n    // If input runs highest -> lowest, reverse both arrays\n    if (input[0] > input[inputLength - 1]) {\n        input = [...input].reverse();\n        output = [...output].reverse();\n    }\n    const mixers = createMixers(output, ease, mixer);\n    const numMixers = mixers.length;\n    const interpolator = (v) => {\n        let i = 0;\n        if (numMixers > 1) {\n            for (; i < input.length - 2; i++) {\n                if (v < input[i + 1])\n                    break;\n            }\n        }\n        const progressInRange = progress(input[i], input[i + 1], v);\n        return mixers[i](progressInRange);\n    };\n    return isClamp\n        ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n        : interpolator;\n}\n\nexport { interpolate };\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n    const offset = [0];\n    fillOffset(offset, arr.length - 1);\n    return offset;\n}\n\nexport { defaultOffset };\n","import { mixNumber } from '../mix/number.mjs';\nimport { progress } from '../progress.mjs';\n\nfunction fillOffset(offset, remaining) {\n    const min = offset[offset.length - 1];\n    for (let i = 1; i <= remaining; i++) {\n        const offsetProgress = progress(0, remaining, i);\n        offset.push(mixNumber(min, 1, offsetProgress));\n    }\n}\n\nexport { fillOffset };\n","import { easeInOut } from '../../easing/ease.mjs';\nimport { isEasingArray } from '../../easing/utils/is-easing-array.mjs';\nimport { easingDefinitionToFunction } from '../../easing/utils/map.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../../utils/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n    return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n    /**\n     * Easing functions can be externally defined as strings. Here we convert them\n     * into actual functions.\n     */\n    const easingFunctions = isEasingArray(ease)\n        ? ease.map(easingDefinitionToFunction)\n        : easingDefinitionToFunction(ease);\n    /**\n     * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n     * to reduce GC during animation.\n     */\n    const state = {\n        done: false,\n        value: keyframeValues[0],\n    };\n    /**\n     * Create a times array based on the provided 0-1 offsets\n     */\n    const absoluteTimes = convertOffsetToTimes(\n    // Only use the provided offsets if they're the correct length\n    // TODO Maybe we should warn here if there's a length mismatch\n    times && times.length === keyframeValues.length\n        ? times\n        : defaultOffset(keyframeValues), duration);\n    const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n        ease: Array.isArray(easingFunctions)\n            ? easingFunctions\n            : defaultEasing(keyframeValues, easingFunctions),\n    });\n    return {\n        calculatedDuration: duration,\n        next: (t) => {\n            state.value = mapTimeToKeyframe(t);\n            state.done = t >= duration;\n            return state;\n        },\n    };\n}\n\nexport { defaultEasing, keyframes };\n","const isEasingArray = (ease) => {\n    return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n","function convertOffsetToTimes(offset, duration) {\n    return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { time } from '../../../frameloop/sync-time.mjs';\nimport { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n    const passTimestamp = ({ timestamp }) => update(timestamp);\n    return {\n        start: () => frame.update(passTimestamp, true),\n        stop: () => cancelFrame(passTimestamp),\n        /**\n         * If we're processing this frame we can use the\n         * framelocked timestamp to keep things in sync.\n         */\n        now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n    };\n};\n\nexport { frameloopDriver };\n","import { KeyframeResolver } from '../../render/utils/KeyframesResolver.mjs';\nimport { spring } from '../generators/spring/index.mjs';\nimport { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { mix } from '../../utils/mix/index.mjs';\nimport { calcGeneratorDuration } from '../generators/utils/calc-duration.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { invariant } from '../../utils/errors.mjs';\nimport { frameloopDriver } from './drivers/driver-frameloop.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\nconst generators = {\n    decay: inertia,\n    inertia,\n    tween: keyframes,\n    keyframes: keyframes,\n    spring,\n};\nconst percentToProgress = (percent) => percent / 100;\n/**\n * Animation that runs on the main thread. Designed to be WAAPI-spec in the subset of\n * features we expose publically. Mostly the compatibility is to ensure visual identity\n * between both WAAPI and main thread animations.\n */\nclass MainThreadAnimation extends BaseAnimation {\n    constructor({ KeyframeResolver: KeyframeResolver$1 = KeyframeResolver, ...options }) {\n        super(options);\n        /**\n         * The time at which the animation was paused.\n         */\n        this.holdTime = null;\n        /**\n         * The time at which the animation was started.\n         */\n        this.startTime = null;\n        /**\n         * The time at which the animation was cancelled.\n         */\n        this.cancelTime = null;\n        /**\n         * The current time of the animation.\n         */\n        this.currentTime = 0;\n        /**\n         * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n         */\n        this.playbackSpeed = 1;\n        /**\n         * The state of the animation to apply when the animation is resolved. This\n         * allows calls to the public API to control the animation before it is resolved,\n         * without us having to resolve it first.\n         */\n        this.pendingPlayState = \"running\";\n        this.state = \"idle\";\n        /**\n         * This method is bound to the instance to fix a pattern where\n         * animation.stop is returned as a reference from a useEffect.\n         */\n        this.stop = () => {\n            this.resolver.cancel();\n            this.isStopped = true;\n            if (this.state === \"idle\")\n                return;\n            this.teardown();\n            const { onStop } = this.options;\n            onStop && onStop();\n        };\n        const { name, motionValue, keyframes } = this.options;\n        const onResolved = (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe);\n        if (name && motionValue && motionValue.owner) {\n            this.resolver = motionValue.owner.resolveKeyframes(keyframes, onResolved, name, motionValue);\n        }\n        else {\n            this.resolver = new KeyframeResolver$1(keyframes, onResolved, name, motionValue);\n        }\n        this.resolver.scheduleResolve();\n    }\n    initPlayback(keyframes$1) {\n        const { type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = this.options;\n        const generatorFactory = generators[type] || keyframes;\n        /**\n         * If our generator doesn't support mixing numbers, we need to replace keyframes with\n         * [0, 100] and then make a function that maps that to the actual keyframes.\n         *\n         * 100 is chosen instead of 1 as it works nicer with spring animations.\n         */\n        let mapPercentToKeyframes;\n        let mirroredGenerator;\n        if (generatorFactory !== keyframes &&\n            typeof keyframes$1[0] !== \"number\") {\n            if (process.env.NODE_ENV !== \"production\") {\n                invariant(keyframes$1.length === 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`);\n            }\n            mapPercentToKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n            keyframes$1 = [0, 100];\n        }\n        const generator = generatorFactory({ ...this.options, keyframes: keyframes$1 });\n        /**\n         * If we have a mirror repeat type we need to create a second generator that outputs the\n         * mirrored (not reversed) animation and later ping pong between the two generators.\n         */\n        if (repeatType === \"mirror\") {\n            mirroredGenerator = generatorFactory({\n                ...this.options,\n                keyframes: [...keyframes$1].reverse(),\n                velocity: -velocity,\n            });\n        }\n        /**\n         * If duration is undefined and we have repeat options,\n         * we need to calculate a duration from the generator.\n         *\n         * We set it to the generator itself to cache the duration.\n         * Any timeline resolver will need to have already precalculated\n         * the duration by this step.\n         */\n        if (generator.calculatedDuration === null) {\n            generator.calculatedDuration = calcGeneratorDuration(generator);\n        }\n        const { calculatedDuration } = generator;\n        const resolvedDuration = calculatedDuration + repeatDelay;\n        const totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n        return {\n            generator,\n            mirroredGenerator,\n            mapPercentToKeyframes,\n            calculatedDuration,\n            resolvedDuration,\n            totalDuration,\n        };\n    }\n    onPostResolved() {\n        const { autoplay = true } = this.options;\n        this.play();\n        if (this.pendingPlayState === \"paused\" || !autoplay) {\n            this.pause();\n        }\n        else {\n            this.state = this.pendingPlayState;\n        }\n    }\n    tick(timestamp, sample = false) {\n        const { resolved } = this;\n        // If the animations has failed to resolve, return the final keyframe.\n        if (!resolved) {\n            const { keyframes } = this.options;\n            return { done: true, value: keyframes[keyframes.length - 1] };\n        }\n        const { finalKeyframe, generator, mirroredGenerator, mapPercentToKeyframes, keyframes, calculatedDuration, totalDuration, resolvedDuration, } = resolved;\n        if (this.startTime === null)\n            return generator.next(0);\n        const { delay, repeat, repeatType, repeatDelay, onUpdate } = this.options;\n        /**\n         * requestAnimationFrame timestamps can come through as lower than\n         * the startTime as set by performance.now(). Here we prevent this,\n         * though in the future it could be possible to make setting startTime\n         * a pending operation that gets resolved here.\n         */\n        if (this.speed > 0) {\n            this.startTime = Math.min(this.startTime, timestamp);\n        }\n        else if (this.speed < 0) {\n            this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n        }\n        // Update currentTime\n        if (sample) {\n            this.currentTime = timestamp;\n        }\n        else if (this.holdTime !== null) {\n            this.currentTime = this.holdTime;\n        }\n        else {\n            // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n            // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n            // example.\n            this.currentTime =\n                Math.round(timestamp - this.startTime) * this.speed;\n        }\n        // Rebase on delay\n        const timeWithoutDelay = this.currentTime - delay * (this.speed >= 0 ? 1 : -1);\n        const isInDelayPhase = this.speed >= 0\n            ? timeWithoutDelay < 0\n            : timeWithoutDelay > totalDuration;\n        this.currentTime = Math.max(timeWithoutDelay, 0);\n        // If this animation has finished, set the current time  to the total duration.\n        if (this.state === \"finished\" && this.holdTime === null) {\n            this.currentTime = totalDuration;\n        }\n        let elapsed = this.currentTime;\n        let frameGenerator = generator;\n        if (repeat) {\n            /**\n             * Get the current progress (0-1) of the animation. If t is >\n             * than duration we'll get values like 2.5 (midway through the\n             * third iteration)\n             */\n            const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n            /**\n             * Get the current iteration (0 indexed). For instance the floor of\n             * 2.5 is 2.\n             */\n            let currentIteration = Math.floor(progress);\n            /**\n             * Get the current progress of the iteration by taking the remainder\n             * so 2.5 is 0.5 through iteration 2\n             */\n            let iterationProgress = progress % 1.0;\n            /**\n             * If iteration progress is 1 we count that as the end\n             * of the previous iteration.\n             */\n            if (!iterationProgress && progress >= 1) {\n                iterationProgress = 1;\n            }\n            iterationProgress === 1 && currentIteration--;\n            currentIteration = Math.min(currentIteration, repeat + 1);\n            /**\n             * Reverse progress if we're not running in \"normal\" direction\n             */\n            const isOddIteration = Boolean(currentIteration % 2);\n            if (isOddIteration) {\n                if (repeatType === \"reverse\") {\n                    iterationProgress = 1 - iterationProgress;\n                    if (repeatDelay) {\n                        iterationProgress -= repeatDelay / resolvedDuration;\n                    }\n                }\n                else if (repeatType === \"mirror\") {\n                    frameGenerator = mirroredGenerator;\n                }\n            }\n            elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n        }\n        /**\n         * If we're in negative time, set state as the initial keyframe.\n         * This prevents delay: x, duration: 0 animations from finishing\n         * instantly.\n         */\n        const state = isInDelayPhase\n            ? { done: false, value: keyframes[0] }\n            : frameGenerator.next(elapsed);\n        if (mapPercentToKeyframes) {\n            state.value = mapPercentToKeyframes(state.value);\n        }\n        let { done } = state;\n        if (!isInDelayPhase && calculatedDuration !== null) {\n            done =\n                this.speed >= 0\n                    ? this.currentTime >= totalDuration\n                    : this.currentTime <= 0;\n        }\n        const isAnimationFinished = this.holdTime === null &&\n            (this.state === \"finished\" || (this.state === \"running\" && done));\n        if (isAnimationFinished && finalKeyframe !== undefined) {\n            state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe);\n        }\n        if (onUpdate) {\n            onUpdate(state.value);\n        }\n        if (isAnimationFinished) {\n            this.finish();\n        }\n        return state;\n    }\n    get duration() {\n        const { resolved } = this;\n        return resolved ? millisecondsToSeconds(resolved.calculatedDuration) : 0;\n    }\n    get time() {\n        return millisecondsToSeconds(this.currentTime);\n    }\n    set time(newTime) {\n        newTime = secondsToMilliseconds(newTime);\n        this.currentTime = newTime;\n        if (this.holdTime !== null || this.speed === 0) {\n            this.holdTime = newTime;\n        }\n        else if (this.driver) {\n            this.startTime = this.driver.now() - newTime / this.speed;\n        }\n    }\n    get speed() {\n        return this.playbackSpeed;\n    }\n    set speed(newSpeed) {\n        const hasChanged = this.playbackSpeed !== newSpeed;\n        this.playbackSpeed = newSpeed;\n        if (hasChanged) {\n            this.time = millisecondsToSeconds(this.currentTime);\n        }\n    }\n    play() {\n        if (!this.resolver.isScheduled) {\n            this.resolver.resume();\n        }\n        if (!this._resolved) {\n            this.pendingPlayState = \"running\";\n            return;\n        }\n        if (this.isStopped)\n            return;\n        const { driver = frameloopDriver, onPlay } = this.options;\n        if (!this.driver) {\n            this.driver = driver((timestamp) => this.tick(timestamp));\n        }\n        onPlay && onPlay();\n        const now = this.driver.now();\n        if (this.holdTime !== null) {\n            this.startTime = now - this.holdTime;\n        }\n        else if (!this.startTime || this.state === \"finished\") {\n            this.startTime = now;\n        }\n        if (this.state === \"finished\") {\n            this.updateFinishedPromise();\n        }\n        this.cancelTime = this.startTime;\n        this.holdTime = null;\n        /**\n         * Set playState to running only after we've used it in\n         * the previous logic.\n         */\n        this.state = \"running\";\n        this.driver.start();\n    }\n    pause() {\n        var _a;\n        if (!this._resolved) {\n            this.pendingPlayState = \"paused\";\n            return;\n        }\n        this.state = \"paused\";\n        this.holdTime = (_a = this.currentTime) !== null && _a !== void 0 ? _a : 0;\n    }\n    complete() {\n        if (this.state !== \"running\") {\n            this.play();\n        }\n        this.pendingPlayState = this.state = \"finished\";\n        this.holdTime = null;\n    }\n    finish() {\n        this.teardown();\n        this.state = \"finished\";\n        const { onComplete } = this.options;\n        onComplete && onComplete();\n    }\n    cancel() {\n        if (this.cancelTime !== null) {\n            this.tick(this.cancelTime);\n        }\n        this.teardown();\n        this.updateFinishedPromise();\n    }\n    teardown() {\n        this.state = \"idle\";\n        this.stopDriver();\n        this.resolveFinishedPromise();\n        this.updateFinishedPromise();\n        this.startTime = this.cancelTime = null;\n        this.resolver.cancel();\n    }\n    stopDriver() {\n        if (!this.driver)\n            return;\n        this.driver.stop();\n        this.driver = undefined;\n    }\n    sample(time) {\n        this.startTime = 0;\n        return this.tick(time, true);\n    }\n}\n// Legacy interface\nfunction animateValue(options) {\n    return new MainThreadAnimation(options);\n}\n\nexport { MainThreadAnimation, animateValue };\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n    let duration = 0;\n    const timeStep = 50;\n    let state = generator.next(duration);\n    while (!state.done && duration < maxGeneratorDuration) {\n        duration += timeStep;\n        state = generator.next(duration);\n    }\n    return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","import { isBezierDefinition } from '../../../easing/utils/is-bezier-definition.mjs';\n\nfunction isWaapiSupportedEasing(easing) {\n    return Boolean(!easing ||\n        (typeof easing === \"string\" && easing in supportedWaapiEasing) ||\n        isBezierDefinition(easing) ||\n        (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n    linear: \"linear\",\n    ease: \"ease\",\n    easeIn: \"ease-in\",\n    easeOut: \"ease-out\",\n    easeInOut: \"ease-in-out\",\n    circIn: cubicBezierAsString([0, 0.65, 0.55, 1]),\n    circOut: cubicBezierAsString([0.55, 0, 1, 0.45]),\n    backIn: cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n    backOut: cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasingWithDefault(easing) {\n    return (mapEasingToNativeEasing(easing) ||\n        supportedWaapiEasing.easeOut);\n}\nfunction mapEasingToNativeEasing(easing) {\n    if (!easing) {\n        return undefined;\n    }\n    else if (isBezierDefinition(easing)) {\n        return cubicBezierAsString(easing);\n    }\n    else if (Array.isArray(easing)) {\n        return easing.map(mapEasingToNativeEasingWithDefault);\n    }\n    else {\n        return supportedWaapiEasing[easing];\n    }\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { DOMKeyframesResolver } from '../../render/dom/DOMKeyframesResolver.mjs';\nimport { memo } from '../../utils/memo.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { BaseAnimation } from './BaseAnimation.mjs';\nimport { MainThreadAnimation } from './MainThreadAnimation.mjs';\nimport { animateStyle } from './waapi/index.mjs';\nimport { isWaapiSupportedEasing } from './waapi/easing.mjs';\nimport { getFinalKeyframe } from './waapi/utils/get-final-keyframe.mjs';\n\nconst supportsWaapi = memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\n/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n    \"opacity\",\n    \"clipPath\",\n    \"filter\",\n    \"transform\",\n    // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved\n    // or until we implement support for linear() easing.\n    // \"background-color\"\n]);\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxDuration = 20000;\n/**\n * Check if an animation can run natively via WAAPI or requires pregenerated keyframes.\n * WAAPI doesn't support spring or function easings so we run these as JS animation before\n * handing off.\n */\nfunction requiresPregeneratedKeyframes(options) {\n    return (options.type === \"spring\" ||\n        options.name === \"backgroundColor\" ||\n        !isWaapiSupportedEasing(options.ease));\n}\nfunction pregenerateKeyframes(keyframes, options) {\n    /**\n     * Create a main-thread animation to pregenerate keyframes.\n     * We sample this at regular intervals to generate keyframes that we then\n     * linearly interpolate between.\n     */\n    const sampleAnimation = new MainThreadAnimation({\n        ...options,\n        keyframes,\n        repeat: 0,\n        delay: 0,\n        isGenerator: true,\n    });\n    let state = { done: false, value: keyframes[0] };\n    const pregeneratedKeyframes = [];\n    /**\n     * Bail after 20 seconds of pre-generated keyframes as it's likely\n     * we're heading for an infinite loop.\n     */\n    let t = 0;\n    while (!state.done && t < maxDuration) {\n        state = sampleAnimation.sample(t);\n        pregeneratedKeyframes.push(state.value);\n        t += sampleDelta;\n    }\n    return {\n        times: undefined,\n        keyframes: pregeneratedKeyframes,\n        duration: t - sampleDelta,\n        ease: \"linear\",\n    };\n}\nclass AcceleratedAnimation extends BaseAnimation {\n    constructor(options) {\n        super(options);\n        const { name, motionValue, keyframes } = this.options;\n        this.resolver = new DOMKeyframesResolver(keyframes, (resolvedKeyframes, finalKeyframe) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe), name, motionValue);\n        this.resolver.scheduleResolve();\n    }\n    initPlayback(keyframes, finalKeyframe) {\n        var _a;\n        let { duration = 300, times, ease, type, motionValue, name, } = this.options;\n        /**\n         * If element has since been unmounted, return false to indicate\n         * the animation failed to initialised.\n         */\n        if (!((_a = motionValue.owner) === null || _a === void 0 ? void 0 : _a.current)) {\n            return false;\n        }\n        /**\n         * If this animation needs pre-generated keyframes then generate.\n         */\n        if (requiresPregeneratedKeyframes(this.options)) {\n            const { onComplete, onUpdate, motionValue, ...options } = this.options;\n            const pregeneratedAnimation = pregenerateKeyframes(keyframes, options);\n            keyframes = pregeneratedAnimation.keyframes;\n            // If this is a very short animation, ensure we have\n            // at least two keyframes to animate between as older browsers\n            // can't animate between a single keyframe.\n            if (keyframes.length === 1) {\n                keyframes[1] = keyframes[0];\n            }\n            duration = pregeneratedAnimation.duration;\n            times = pregeneratedAnimation.times;\n            ease = pregeneratedAnimation.ease;\n            type = \"keyframes\";\n        }\n        const animation = animateStyle(motionValue.owner.current, name, keyframes, { ...this.options, duration, times, ease });\n        // Override the browser calculated startTime with one synchronised to other JS\n        // and WAAPI animations starting this event loop.\n        animation.startTime = time.now();\n        if (this.pendingTimeline) {\n            animation.timeline = this.pendingTimeline;\n            this.pendingTimeline = undefined;\n        }\n        else {\n            /**\n             * Prefer the `onfinish` prop as it's more widely supported than\n             * the `finished` promise.\n             *\n             * Here, we synchronously set the provided MotionValue to the end\n             * keyframe. If we didn't, when the WAAPI animation is finished it would\n             * be removed from the element which would then revert to its old styles.\n             */\n            animation.onfinish = () => {\n                const { onComplete } = this.options;\n                motionValue.set(getFinalKeyframe(keyframes, this.options, finalKeyframe));\n                onComplete && onComplete();\n                this.cancel();\n                this.resolveFinishedPromise();\n            };\n        }\n        return {\n            animation,\n            duration,\n            times,\n            type,\n            ease,\n            keyframes: keyframes,\n        };\n    }\n    get duration() {\n        const { resolved } = this;\n        if (!resolved)\n            return 0;\n        const { duration } = resolved;\n        return millisecondsToSeconds(duration);\n    }\n    get time() {\n        const { resolved } = this;\n        if (!resolved)\n            return 0;\n        const { animation } = resolved;\n        return millisecondsToSeconds(animation.currentTime || 0);\n    }\n    set time(newTime) {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.currentTime = secondsToMilliseconds(newTime);\n    }\n    get speed() {\n        const { resolved } = this;\n        if (!resolved)\n            return 1;\n        const { animation } = resolved;\n        return animation.playbackRate;\n    }\n    set speed(newSpeed) {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.playbackRate = newSpeed;\n    }\n    get state() {\n        const { resolved } = this;\n        if (!resolved)\n            return \"idle\";\n        const { animation } = resolved;\n        return animation.playState;\n    }\n    /**\n     * Replace the default DocumentTimeline with another AnimationTimeline.\n     * Currently used for scroll animations.\n     */\n    attachTimeline(timeline) {\n        if (!this._resolved) {\n            this.pendingTimeline = timeline;\n        }\n        else {\n            const { resolved } = this;\n            if (!resolved)\n                return noop;\n            const { animation } = resolved;\n            animation.timeline = timeline;\n            animation.onfinish = null;\n        }\n        return noop;\n    }\n    play() {\n        if (this.isStopped)\n            return;\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        if (animation.playState === \"finished\") {\n            this.updateFinishedPromise();\n        }\n        animation.play();\n    }\n    pause() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation } = resolved;\n        animation.pause();\n    }\n    stop() {\n        this.resolver.cancel();\n        this.isStopped = true;\n        if (this.state === \"idle\")\n            return;\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        const { animation, keyframes, duration, type, ease, times } = resolved;\n        if (animation.playState === \"idle\" ||\n            animation.playState === \"finished\") {\n            return;\n        }\n        /**\n         * WAAPI doesn't natively have any interruption capabilities.\n         *\n         * Rather than read commited styles back out of the DOM, we can\n         * create a renderless JS animation and sample it twice to calculate\n         * its current value, \"previous\" value, and therefore allow\n         * Motion to calculate velocity for any subsequent animation.\n         */\n        if (this.time) {\n            const { motionValue, onUpdate, onComplete, ...options } = this.options;\n            const sampleAnimation = new MainThreadAnimation({\n                ...options,\n                keyframes,\n                duration,\n                type,\n                ease,\n                times,\n                isGenerator: true,\n            });\n            const sampleTime = secondsToMilliseconds(this.time);\n            motionValue.setWithVelocity(sampleAnimation.sample(sampleTime - sampleDelta).value, sampleAnimation.sample(sampleTime).value, sampleDelta);\n        }\n        this.cancel();\n    }\n    complete() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        resolved.animation.finish();\n    }\n    cancel() {\n        const { resolved } = this;\n        if (!resolved)\n            return;\n        resolved.animation.cancel();\n    }\n    static supports(options) {\n        const { motionValue, name, repeatDelay, repeatType, damping, type } = options;\n        return (supportsWaapi() &&\n            name &&\n            acceleratedValues.has(name) &&\n            motionValue &&\n            motionValue.owner &&\n            motionValue.owner.current instanceof HTMLElement &&\n            /**\n             * If we're outputting values to onUpdate then we can't use WAAPI as there's\n             * no way to read the value from WAAPI every frame.\n             */\n            !motionValue.owner.getProps().onUpdate &&\n            !repeatDelay &&\n            repeatType !== \"mirror\" &&\n            damping !== 0 &&\n            type !== \"inertia\");\n    }\n}\n\nexport { AcceleratedAnimation };\n","import { mapEasingToNativeEasing } from './easing.mjs';\n\nfunction animateStyle(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease, times, } = {}) {\n    const keyframeOptions = { [valueName]: keyframes };\n    if (times)\n        keyframeOptions.offset = times;\n    const easing = mapEasingToNativeEasing(ease);\n    /**\n     * If this is an easing array, apply to keyframes, not animation as a whole\n     */\n    if (Array.isArray(easing))\n        keyframeOptions.easing = easing;\n    return element.animate(keyframeOptions, {\n        delay,\n        duration,\n        easing: !Array.isArray(easing) ? easing : \"linear\",\n        fill: \"both\",\n        iterations: repeat + 1,\n        direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n    });\n}\n\nexport { animateStyle };\n","import { memo } from '../../../utils/memo.mjs';\n\nconst supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);\n\nexport { supportsScrollTimeline };\n","import { observeTimeline } from '../render/dom/scroll/observe.mjs';\nimport { supportsScrollTimeline } from '../render/dom/scroll/supports.mjs';\n\nclass GroupPlaybackControls {\n    constructor(animations) {\n        // Bound to accomodate common `return animation.stop` pattern\n        this.stop = () => this.runAll(\"stop\");\n        this.animations = animations.filter(Boolean);\n    }\n    then(onResolve, onReject) {\n        return Promise.all(this.animations).then(onResolve).catch(onReject);\n    }\n    /**\n     * TODO: Filter out cancelled or stopped animations before returning\n     */\n    getAll(propName) {\n        return this.animations[0][propName];\n    }\n    setAll(propName, newValue) {\n        for (let i = 0; i < this.animations.length; i++) {\n            this.animations[i][propName] = newValue;\n        }\n    }\n    attachTimeline(timeline) {\n        const cancelAll = this.animations.map((animation) => {\n            if (supportsScrollTimeline() && animation.attachTimeline) {\n                animation.attachTimeline(timeline);\n            }\n            else {\n                animation.pause();\n                return observeTimeline((progress) => {\n                    animation.time = animation.duration * progress;\n                }, timeline);\n            }\n        });\n        return () => {\n            cancelAll.forEach((cancelTimeline, i) => {\n                if (cancelTimeline)\n                    cancelTimeline();\n                this.animations[i].stop();\n            });\n        };\n    }\n    get time() {\n        return this.getAll(\"time\");\n    }\n    set time(time) {\n        this.setAll(\"time\", time);\n    }\n    get speed() {\n        return this.getAll(\"speed\");\n    }\n    set speed(speed) {\n        this.setAll(\"speed\", speed);\n    }\n    get duration() {\n        let max = 0;\n        for (let i = 0; i < this.animations.length; i++) {\n            max = Math.max(max, this.animations[i].duration);\n        }\n        return max;\n    }\n    runAll(methodName) {\n        this.animations.forEach((controls) => controls[methodName]());\n    }\n    play() {\n        this.runAll(\"play\");\n    }\n    pause() {\n        this.runAll(\"pause\");\n    }\n    cancel() {\n        this.runAll(\"cancel\");\n    }\n    complete() {\n        this.runAll(\"complete\");\n    }\n}\n\nexport { GroupPlaybackControls };\n","import { frame, cancelFrame } from '../../../frameloop/frame.mjs';\n\nfunction observeTimeline(update, timeline) {\n    let prevProgress;\n    const onFrame = () => {\n        const { currentTime } = timeline;\n        const percentage = currentTime === null ? 0 : currentTime.value;\n        const progress = percentage / 100;\n        if (prevProgress !== progress) {\n            update(progress);\n        }\n        prevProgress = progress;\n    };\n    frame.update(onFrame, true);\n    return () => cancelFrame(onFrame);\n}\n\nexport { observeTimeline };\n","import { secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { getValueTransition, isTransitionDefined } from '../utils/transitions.mjs';\nimport { MotionGlobalConfig } from '../../utils/GlobalConfig.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { getFinalKeyframe } from '../animators/waapi/utils/get-final-keyframe.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\nimport { AcceleratedAnimation } from '../animators/AcceleratedAnimation.mjs';\nimport { MainThreadAnimation } from '../animators/MainThreadAnimation.mjs';\nimport { GroupPlaybackControls } from '../GroupPlaybackControls.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n    const valueTransition = getValueTransition(transition, name) || {};\n    /**\n     * Most transition values are currently completely overwritten by value-specific\n     * transitions. In the future it'd be nicer to blend these transitions. But for now\n     * delay actually does inherit from the root transition if not value-specific.\n     */\n    const delay = valueTransition.delay || transition.delay || 0;\n    /**\n     * Elapsed isn't a public transition option but can be passed through from\n     * optimized appear effects in milliseconds.\n     */\n    let { elapsed = 0 } = transition;\n    elapsed = elapsed - secondsToMilliseconds(delay);\n    let options = {\n        keyframes: Array.isArray(target) ? target : [null, target],\n        ease: \"easeOut\",\n        velocity: value.getVelocity(),\n        ...valueTransition,\n        delay: -elapsed,\n        onUpdate: (v) => {\n            value.set(v);\n            valueTransition.onUpdate && valueTransition.onUpdate(v);\n        },\n        onComplete: () => {\n            onComplete();\n            valueTransition.onComplete && valueTransition.onComplete();\n        },\n        name,\n        motionValue: value,\n        element: isHandoff ? undefined : element,\n    };\n    /**\n     * If there's no transition defined for this value, we can generate\n     * unqiue transition settings for this value.\n     */\n    if (!isTransitionDefined(valueTransition)) {\n        options = {\n            ...options,\n            ...getDefaultTransition(name, options),\n        };\n    }\n    /**\n     * Both WAAPI and our internal animation functions use durations\n     * as defined by milliseconds, while our external API defines them\n     * as seconds.\n     */\n    if (options.duration) {\n        options.duration = secondsToMilliseconds(options.duration);\n    }\n    if (options.repeatDelay) {\n        options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n    }\n    if (options.from !== undefined) {\n        options.keyframes[0] = options.from;\n    }\n    let shouldSkip = false;\n    if (options.type === false ||\n        (options.duration === 0 && !options.repeatDelay)) {\n        options.duration = 0;\n        if (options.delay === 0) {\n            shouldSkip = true;\n        }\n    }\n    if (instantAnimationState.current ||\n        MotionGlobalConfig.skipAnimations) {\n        shouldSkip = true;\n        options.duration = 0;\n        options.delay = 0;\n    }\n    /**\n     * If we can or must skip creating the animation, and apply only\n     * the final keyframe, do so. We also check once keyframes are resolved but\n     * this early check prevents the need to create an animation at all.\n     */\n    if (shouldSkip && !isHandoff && value.get() !== undefined) {\n        const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n        if (finalKeyframe !== undefined) {\n            frame.update(() => {\n                options.onUpdate(finalKeyframe);\n                options.onComplete();\n            });\n            // We still want to return some animation controls here rather\n            // than returning undefined\n            return new GroupPlaybackControls([]);\n        }\n    }\n    /**\n     * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n     * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n     * optimised animation.\n     */\n    if (!isHandoff && AcceleratedAnimation.supports(options)) {\n        return new AcceleratedAnimation(options);\n    }\n    else {\n        return new MainThreadAnimation(options);\n    }\n};\n\nexport { animateMotionValue };\n","import { isMotionValue } from '../utils/is-motion-value.mjs';\n\nfunction isWillChangeMotionValue(value) {\n    return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n","function addUniqueItem(arr, item) {\n    if (arr.indexOf(item) === -1)\n        arr.push(item);\n}\nfunction removeItem(arr, item) {\n    const index = arr.indexOf(item);\n    if (index > -1)\n        arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n    const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n    if (startIndex >= 0 && startIndex < arr.length) {\n        const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n        const [item] = arr.splice(fromIndex, 1);\n        arr.splice(endIndex, 0, item);\n    }\n    return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n    constructor() {\n        this.subscriptions = [];\n    }\n    add(handler) {\n        addUniqueItem(this.subscriptions, handler);\n        return () => removeItem(this.subscriptions, handler);\n    }\n    notify(a, b, c) {\n        const numSubscriptions = this.subscriptions.length;\n        if (!numSubscriptions)\n            return;\n        if (numSubscriptions === 1) {\n            /**\n             * If there's only a single handler we can just call it without invoking a loop.\n             */\n            this.subscriptions[0](a, b, c);\n        }\n        else {\n            for (let i = 0; i < numSubscriptions; i++) {\n                /**\n                 * Check whether the handler exists before firing as it's possible\n                 * the subscriptions were modified during this loop running.\n                 */\n                const handler = this.subscriptions[i];\n                handler && handler(a, b, c);\n            }\n        }\n    }\n    getSize() {\n        return this.subscriptions.length;\n    }\n    clear() {\n        this.subscriptions.length = 0;\n    }\n}\n\nexport { SubscriptionManager };\n","import { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n    return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n    current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n    /**\n     * @param init - The initiating value\n     * @param config - Optional configuration options\n     *\n     * -  `transformer`: A function to transform incoming values with.\n     *\n     * @internal\n     */\n    constructor(init, options = {}) {\n        /**\n         * This will be replaced by the build step with the latest version number.\n         * When MotionValues are provided to motion components, warn if versions are mixed.\n         */\n        this.version = \"11.2.11\";\n        /**\n         * Tracks whether this value can output a velocity. Currently this is only true\n         * if the value is numerical, but we might be able to widen the scope here and support\n         * other value types.\n         *\n         * @internal\n         */\n        this.canTrackVelocity = null;\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        this.updateAndNotify = (v, render = true) => {\n            const currentTime = time.now();\n            /**\n             * If we're updating the value during another frame or eventloop\n             * than the previous frame, then the we set the previous frame value\n             * to current.\n             */\n            if (this.updatedAt !== currentTime) {\n                this.setPrevFrameValue();\n            }\n            this.prev = this.current;\n            this.setCurrent(v);\n            // Update update subscribers\n            if (this.current !== this.prev && this.events.change) {\n                this.events.change.notify(this.current);\n            }\n            // Update render subscribers\n            if (render && this.events.renderRequest) {\n                this.events.renderRequest.notify(this.current);\n            }\n        };\n        this.hasAnimated = false;\n        this.setCurrent(init);\n        this.owner = options.owner;\n    }\n    setCurrent(current) {\n        this.current = current;\n        this.updatedAt = time.now();\n        if (this.canTrackVelocity === null && current !== undefined) {\n            this.canTrackVelocity = isFloat(this.current);\n        }\n    }\n    setPrevFrameValue(prevFrameValue = this.current) {\n        this.prevFrameValue = prevFrameValue;\n        this.prevUpdatedAt = this.updatedAt;\n    }\n    /**\n     * Adds a function that will be notified when the `MotionValue` is updated.\n     *\n     * It returns a function that, when called, will cancel the subscription.\n     *\n     * When calling `onChange` inside a React component, it should be wrapped with the\n     * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n     * from the `useEffect` function to ensure you don't add duplicate subscribers..\n     *\n     * ```jsx\n     * export const MyComponent = () => {\n     *   const x = useMotionValue(0)\n     *   const y = useMotionValue(0)\n     *   const opacity = useMotionValue(1)\n     *\n     *   useEffect(() => {\n     *     function updateOpacity() {\n     *       const maxXY = Math.max(x.get(), y.get())\n     *       const newOpacity = transform(maxXY, [0, 100], [1, 0])\n     *       opacity.set(newOpacity)\n     *     }\n     *\n     *     const unsubscribeX = x.on(\"change\", updateOpacity)\n     *     const unsubscribeY = y.on(\"change\", updateOpacity)\n     *\n     *     return () => {\n     *       unsubscribeX()\n     *       unsubscribeY()\n     *     }\n     *   }, [])\n     *\n     *   return <motion.div style={{ x }} />\n     * }\n     * ```\n     *\n     * @param subscriber - A function that receives the latest value.\n     * @returns A function that, when called, will cancel this subscription.\n     *\n     * @deprecated\n     */\n    onChange(subscription) {\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n        }\n        return this.on(\"change\", subscription);\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        const unsubscribe = this.events[eventName].add(callback);\n        if (eventName === \"change\") {\n            return () => {\n                unsubscribe();\n                /**\n                 * If we have no more change listeners by the start\n                 * of the next frame, stop active animations.\n                 */\n                frame.read(() => {\n                    if (!this.events.change.getSize()) {\n                        this.stop();\n                    }\n                });\n            };\n        }\n        return unsubscribe;\n    }\n    clearListeners() {\n        for (const eventManagers in this.events) {\n            this.events[eventManagers].clear();\n        }\n    }\n    /**\n     * Attaches a passive effect to the `MotionValue`.\n     *\n     * @internal\n     */\n    attach(passiveEffect, stopPassiveEffect) {\n        this.passiveEffect = passiveEffect;\n        this.stopPassiveEffect = stopPassiveEffect;\n    }\n    /**\n     * Sets the state of the `MotionValue`.\n     *\n     * @remarks\n     *\n     * ```jsx\n     * const x = useMotionValue(0)\n     * x.set(10)\n     * ```\n     *\n     * @param latest - Latest value to set.\n     * @param render - Whether to notify render subscribers. Defaults to `true`\n     *\n     * @public\n     */\n    set(v, render = true) {\n        if (!render || !this.passiveEffect) {\n            this.updateAndNotify(v, render);\n        }\n        else {\n            this.passiveEffect(v, this.updateAndNotify);\n        }\n    }\n    setWithVelocity(prev, current, delta) {\n        this.set(current);\n        this.prev = undefined;\n        this.prevFrameValue = prev;\n        this.prevUpdatedAt = this.updatedAt - delta;\n    }\n    /**\n     * Set the state of the `MotionValue`, stopping any active animations,\n     * effects, and resets velocity to `0`.\n     */\n    jump(v, endAnimation = true) {\n        this.updateAndNotify(v);\n        this.prev = v;\n        this.prevUpdatedAt = this.prevFrameValue = undefined;\n        endAnimation && this.stop();\n        if (this.stopPassiveEffect)\n            this.stopPassiveEffect();\n    }\n    /**\n     * Returns the latest state of `MotionValue`\n     *\n     * @returns - The latest state of `MotionValue`\n     *\n     * @public\n     */\n    get() {\n        if (collectMotionValues.current) {\n            collectMotionValues.current.push(this);\n        }\n        return this.current;\n    }\n    /**\n     * @public\n     */\n    getPrevious() {\n        return this.prev;\n    }\n    /**\n     * Returns the latest velocity of `MotionValue`\n     *\n     * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n     *\n     * @public\n     */\n    getVelocity() {\n        const currentTime = time.now();\n        if (!this.canTrackVelocity ||\n            this.prevFrameValue === undefined ||\n            currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n            return 0;\n        }\n        const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n        // Casts because of parseFloat's poor typing\n        return velocityPerSecond(parseFloat(this.current) -\n            parseFloat(this.prevFrameValue), delta);\n    }\n    /**\n     * Registers a new animation to control this `MotionValue`. Only one\n     * animation can drive a `MotionValue` at one time.\n     *\n     * ```jsx\n     * value.start()\n     * ```\n     *\n     * @param animation - A function that starts the provided animation\n     *\n     * @internal\n     */\n    start(startAnimation) {\n        this.stop();\n        return new Promise((resolve) => {\n            this.hasAnimated = true;\n            this.animation = startAnimation(resolve);\n            if (this.events.animationStart) {\n                this.events.animationStart.notify();\n            }\n        }).then(() => {\n            if (this.events.animationComplete) {\n                this.events.animationComplete.notify();\n            }\n            this.clearAnimation();\n        });\n    }\n    /**\n     * Stop the currently active animation.\n     *\n     * @public\n     */\n    stop() {\n        if (this.animation) {\n            this.animation.stop();\n            if (this.events.animationCancel) {\n                this.events.animationCancel.notify();\n            }\n        }\n        this.clearAnimation();\n    }\n    /**\n     * Returns `true` if this value is currently animating.\n     *\n     * @public\n     */\n    isAnimating() {\n        return !!this.animation;\n    }\n    clearAnimation() {\n        delete this.animation;\n    }\n    /**\n     * Destroy and clean up subscribers to this `MotionValue`.\n     *\n     * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n     * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n     * created a `MotionValue` via the `motionValue` function.\n     *\n     * @public\n     */\n    destroy() {\n        this.clearListeners();\n        this.stop();\n        if (this.stopPassiveEffect) {\n            this.stopPassiveEffect();\n        }\n    }\n}\nfunction motionValue(init, options) {\n    return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n","import { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n    if (visualElement.hasValue(key)) {\n        visualElement.getValue(key).set(value);\n    }\n    else {\n        visualElement.addValue(key, motionValue(value));\n    }\n}\nfunction setTarget(visualElement, definition) {\n    const resolved = resolveVariant(visualElement, definition);\n    let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n    target = { ...target, ...transitionEnd };\n    for (const key in target) {\n        const value = resolveFinalValueInKeyframes(target[key]);\n        setMotionValue(visualElement, key, value);\n    }\n}\n\nexport { setTarget };\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n    return visualElement.getProps()[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n","import { transformProps } from '../../render/html/utils/transform.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { getValueTransition } from '../utils/transitions.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n    const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n    needsAnimating[key] = false;\n    return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n    var _a;\n    let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = targetAndTransition;\n    const willChange = visualElement.getValue(\"willChange\");\n    if (transitionOverride)\n        transition = transitionOverride;\n    const animations = [];\n    const animationTypeState = type &&\n        visualElement.animationState &&\n        visualElement.animationState.getState()[type];\n    for (const key in target) {\n        const value = visualElement.getValue(key, (_a = visualElement.latestValues[key]) !== null && _a !== void 0 ? _a : null);\n        const valueTarget = target[key];\n        if (valueTarget === undefined ||\n            (animationTypeState &&\n                shouldBlockAnimation(animationTypeState, key))) {\n            continue;\n        }\n        const valueTransition = {\n            delay,\n            elapsed: 0,\n            ...getValueTransition(transition || {}, key),\n        };\n        /**\n         * If this is the first time a value is being animated, check\n         * to see if we're handling off from an existing animation.\n         */\n        let isHandoff = false;\n        if (window.HandoffAppearAnimations) {\n            const appearId = getOptimisedAppearId(visualElement);\n            if (appearId) {\n                const elapsed = window.HandoffAppearAnimations(appearId, key, value, frame);\n                if (elapsed !== null) {\n                    valueTransition.elapsed = elapsed;\n                    isHandoff = true;\n                }\n            }\n        }\n        value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)\n            ? { type: false }\n            : valueTransition, visualElement, isHandoff));\n        const animation = value.animation;\n        if (animation) {\n            if (isWillChangeMotionValue(willChange)) {\n                willChange.add(key);\n                animation.then(() => willChange.remove(key));\n            }\n            animations.push(animation);\n        }\n    }\n    if (transitionEnd) {\n        Promise.all(animations).then(() => {\n            frame.update(() => {\n                transitionEnd && setTarget(visualElement, transitionEnd);\n            });\n        });\n    }\n    return animations;\n}\n\nexport { animateTarget };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n    var _a;\n    const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n        ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n        : undefined);\n    let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n    if (options.transitionOverride) {\n        transition = options.transitionOverride;\n    }\n    /**\n     * If we have a variant, create a callback that runs it as an animation.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getAnimation = resolved\n        ? () => Promise.all(animateTarget(visualElement, resolved, options))\n        : () => Promise.resolve();\n    /**\n     * If we have children, create a callback that runs all their animations.\n     * Otherwise, we resolve a Promise immediately for a composable no-op.\n     */\n    const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n        ? (forwardDelay = 0) => {\n            const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n            return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options);\n        }\n        : () => Promise.resolve();\n    /**\n     * If the transition explicitly defines a \"when\" option, we need to resolve either\n     * this animation or all children animations before playing the other.\n     */\n    const { when } = transition;\n    if (when) {\n        const [first, last] = when === \"beforeChildren\"\n            ? [getAnimation, getChildAnimations]\n            : [getChildAnimations, getAnimation];\n        return first().then(() => last());\n    }\n    else {\n        return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n    }\n}\nfunction animateChildren(visualElement, variant, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n    const animations = [];\n    const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n    const generateStaggerDuration = staggerDirection === 1\n        ? (i = 0) => i * staggerChildren\n        : (i = 0) => maxStaggerDuration - i * staggerChildren;\n    Array.from(visualElement.variantChildren)\n        .sort(sortByTreeOrder)\n        .forEach((child, i) => {\n        child.notify(\"AnimationStart\", variant);\n        animations.push(animateVariant(child, variant, {\n            ...options,\n            delay: delayChildren + generateStaggerDuration(i),\n        }).then(() => child.notify(\"AnimationComplete\", variant)));\n    });\n    return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n    return a.sortNodePosition(b);\n}\n\nexport { animateVariant, sortByTreeOrder };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\nimport { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n    return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n    let animate = animateList(visualElement);\n    let state = createState();\n    let isInitialRender = true;\n    /**\n     * This function will be used to reduce the animation definitions for\n     * each active animation type into an object of resolved values for it.\n     */\n    const buildResolvedTypeValues = (type) => (acc, definition) => {\n        var _a;\n        const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n            ? (_a = visualElement.presenceContext) === null || _a === void 0 ? void 0 : _a.custom\n            : undefined);\n        if (resolved) {\n            const { transition, transitionEnd, ...target } = resolved;\n            acc = { ...acc, ...target, ...transitionEnd };\n        }\n        return acc;\n    };\n    /**\n     * This just allows us to inject mocked animation functions\n     * @internal\n     */\n    function setAnimateFunction(makeAnimator) {\n        animate = makeAnimator(visualElement);\n    }\n    /**\n     * When we receive new props, we need to:\n     * 1. Create a list of protected keys for each type. This is a directory of\n     *    value keys that are currently being \"handled\" by types of a higher priority\n     *    so that whenever an animation is played of a given type, these values are\n     *    protected from being animated.\n     * 2. Determine if an animation type needs animating.\n     * 3. Determine if any values have been removed from a type and figure out\n     *    what to animate those to.\n     */\n    function animateChanges(changedActiveType) {\n        const props = visualElement.getProps();\n        const context = visualElement.getVariantContext(true) || {};\n        /**\n         * A list of animations that we'll build into as we iterate through the animation\n         * types. This will get executed at the end of the function.\n         */\n        const animations = [];\n        /**\n         * Keep track of which values have been removed. Then, as we hit lower priority\n         * animation types, we can check if they contain removed values and animate to that.\n         */\n        const removedKeys = new Set();\n        /**\n         * A dictionary of all encountered keys. This is an object to let us build into and\n         * copy it without iteration. Each time we hit an animation type we set its protected\n         * keys - the keys its not allowed to animate - to the latest version of this object.\n         */\n        let encounteredKeys = {};\n        /**\n         * If a variant has been removed at a given index, and this component is controlling\n         * variant animations, we want to ensure lower-priority variants are forced to animate.\n         */\n        let removedVariantIndex = Infinity;\n        /**\n         * Iterate through all animation types in reverse priority order. For each, we want to\n         * detect which values it's handling and whether or not they've changed (and therefore\n         * need to be animated). If any values have been removed, we want to detect those in\n         * lower priority props and flag for animation.\n         */\n        for (let i = 0; i < numAnimationTypes; i++) {\n            const type = reversePriorityOrder[i];\n            const typeState = state[type];\n            const prop = props[type] !== undefined\n                ? props[type]\n                : context[type];\n            const propIsVariant = isVariantLabel(prop);\n            /**\n             * If this type has *just* changed isActive status, set activeDelta\n             * to that status. Otherwise set to null.\n             */\n            const activeDelta = type === changedActiveType ? typeState.isActive : null;\n            if (activeDelta === false)\n                removedVariantIndex = i;\n            /**\n             * If this prop is an inherited variant, rather than been set directly on the\n             * component itself, we want to make sure we allow the parent to trigger animations.\n             *\n             * TODO: Can probably change this to a !isControllingVariants check\n             */\n            let isInherited = prop === context[type] &&\n                prop !== props[type] &&\n                propIsVariant;\n            /**\n             *\n             */\n            if (isInherited &&\n                isInitialRender &&\n                visualElement.manuallyAnimateOnMount) {\n                isInherited = false;\n            }\n            /**\n             * Set all encountered keys so far as the protected keys for this type. This will\n             * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n             */\n            typeState.protectedKeys = { ...encounteredKeys };\n            // Check if we can skip analysing this prop early\n            if (\n            // If it isn't active and hasn't *just* been set as inactive\n            (!typeState.isActive && activeDelta === null) ||\n                // If we didn't and don't have any defined prop for this animation type\n                (!prop && !typeState.prevProp) ||\n                // Or if the prop doesn't define an animation\n                isAnimationControls(prop) ||\n                typeof prop === \"boolean\") {\n                continue;\n            }\n            /**\n             * As we go look through the values defined on this type, if we detect\n             * a changed value or a value that was removed in a higher priority, we set\n             * this to true and add this prop to the animation list.\n             */\n            const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n            let shouldAnimateType = variantDidChange ||\n                // If we're making this variant active, we want to always make it active\n                (type === changedActiveType &&\n                    typeState.isActive &&\n                    !isInherited &&\n                    propIsVariant) ||\n                // If we removed a higher-priority variant (i is in reverse order)\n                (i > removedVariantIndex && propIsVariant);\n            let handledRemovedValues = false;\n            /**\n             * As animations can be set as variant lists, variants or target objects, we\n             * coerce everything to an array if it isn't one already\n             */\n            const definitionList = Array.isArray(prop) ? prop : [prop];\n            /**\n             * Build an object of all the resolved values. We'll use this in the subsequent\n             * animateChanges calls to determine whether a value has changed.\n             */\n            let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n            if (activeDelta === false)\n                resolvedValues = {};\n            /**\n             * Now we need to loop through all the keys in the prev prop and this prop,\n             * and decide:\n             * 1. If the value has changed, and needs animating\n             * 2. If it has been removed, and needs adding to the removedKeys set\n             * 3. If it has been removed in a higher priority type and needs animating\n             * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n             *    needs adding to the type's protectedKeys list.\n             */\n            const { prevResolvedValues = {} } = typeState;\n            const allKeys = {\n                ...prevResolvedValues,\n                ...resolvedValues,\n            };\n            const markToAnimate = (key) => {\n                shouldAnimateType = true;\n                if (removedKeys.has(key)) {\n                    handledRemovedValues = true;\n                    removedKeys.delete(key);\n                }\n                typeState.needsAnimating[key] = true;\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = false;\n            };\n            for (const key in allKeys) {\n                const next = resolvedValues[key];\n                const prev = prevResolvedValues[key];\n                // If we've already handled this we can just skip ahead\n                if (encounteredKeys.hasOwnProperty(key))\n                    continue;\n                /**\n                 * If the value has changed, we probably want to animate it.\n                 */\n                let valueHasChanged = false;\n                if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n                    valueHasChanged = !shallowCompare(next, prev);\n                }\n                else {\n                    valueHasChanged = next !== prev;\n                }\n                if (valueHasChanged) {\n                    if (next !== undefined && next !== null) {\n                        // If next is defined and doesn't equal prev, it needs animating\n                        markToAnimate(key);\n                    }\n                    else {\n                        // If it's undefined, it's been removed.\n                        removedKeys.add(key);\n                    }\n                }\n                else if (next !== undefined && removedKeys.has(key)) {\n                    /**\n                     * If next hasn't changed and it isn't undefined, we want to check if it's\n                     * been removed by a higher priority\n                     */\n                    markToAnimate(key);\n                }\n                else {\n                    /**\n                     * If it hasn't changed, we add it to the list of protected values\n                     * to ensure it doesn't get animated.\n                     */\n                    typeState.protectedKeys[key] = true;\n                }\n            }\n            /**\n             * Update the typeState so next time animateChanges is called we can compare the\n             * latest prop and resolvedValues to these.\n             */\n            typeState.prevProp = prop;\n            typeState.prevResolvedValues = resolvedValues;\n            /**\n             *\n             */\n            if (typeState.isActive) {\n                encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n            }\n            if (isInitialRender && visualElement.blockInitialAnimation) {\n                shouldAnimateType = false;\n            }\n            /**\n             * If this is an inherited prop we want to hard-block animations\n             */\n            if (shouldAnimateType && (!isInherited || handledRemovedValues)) {\n                animations.push(...definitionList.map((animation) => ({\n                    animation: animation,\n                    options: { type },\n                })));\n            }\n        }\n        /**\n         * If there are some removed value that haven't been dealt with,\n         * we need to create a new animation that falls back either to the value\n         * defined in the style prop, or the last read value.\n         */\n        if (removedKeys.size) {\n            const fallbackAnimation = {};\n            removedKeys.forEach((key) => {\n                const fallbackTarget = visualElement.getBaseTarget(key);\n                const motionValue = visualElement.getValue(key);\n                if (motionValue)\n                    motionValue.liveStyle = true;\n                // @ts-expect-error - @mattgperry to figure if we should do something here\n                fallbackAnimation[key] = fallbackTarget !== null && fallbackTarget !== void 0 ? fallbackTarget : null;\n            });\n            animations.push({ animation: fallbackAnimation });\n        }\n        let shouldAnimate = Boolean(animations.length);\n        if (isInitialRender &&\n            (props.initial === false || props.initial === props.animate) &&\n            !visualElement.manuallyAnimateOnMount) {\n            shouldAnimate = false;\n        }\n        isInitialRender = false;\n        return shouldAnimate ? animate(animations) : Promise.resolve();\n    }\n    /**\n     * Change whether a certain animation type is active.\n     */\n    function setActive(type, isActive) {\n        var _a;\n        // If the active state hasn't changed, we can safely do nothing here\n        if (state[type].isActive === isActive)\n            return Promise.resolve();\n        // Propagate active change to children\n        (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n        state[type].isActive = isActive;\n        const animations = animateChanges(type);\n        for (const key in state) {\n            state[key].protectedKeys = {};\n        }\n        return animations;\n    }\n    return {\n        animateChanges,\n        setActive,\n        setAnimateFunction,\n        getState: () => state,\n        reset: () => {\n            state = createState();\n            isInitialRender = true;\n        },\n    };\n}\nfunction checkVariantsDidChange(prev, next) {\n    if (typeof next === \"string\") {\n        return next !== prev;\n    }\n    else if (Array.isArray(next)) {\n        return !shallowCompare(next, prev);\n    }\n    return false;\n}\nfunction createTypeState(isActive = false) {\n    return {\n        isActive,\n        protectedKeys: {},\n        needsAnimating: {},\n        prevResolvedValues: {},\n    };\n}\nfunction createState() {\n    return {\n        animate: createTypeState(true),\n        whileInView: createTypeState(),\n        whileHover: createTypeState(),\n        whileTap: createTypeState(),\n        whileDrag: createTypeState(),\n        whileFocus: createTypeState(),\n        exit: createTypeState(),\n    };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n    visualElement.notify(\"AnimationStart\", definition);\n    let animation;\n    if (Array.isArray(definition)) {\n        const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n        animation = Promise.all(animations);\n    }\n    else if (typeof definition === \"string\") {\n        animation = animateVariant(visualElement, definition, options);\n    }\n    else {\n        const resolvedDefinition = typeof definition === \"function\"\n            ? resolveVariant(visualElement, definition, options.custom)\n            : definition;\n        animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n    }\n    return animation.then(() => {\n        frame.postRender(() => {\n            visualElement.notify(\"AnimationComplete\", definition);\n        });\n    });\n}\n\nexport { animateVisualElement };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n    constructor() {\n        super(...arguments);\n        this.id = id++;\n    }\n    update() {\n        if (!this.node.presenceContext)\n            return;\n        const { isPresent, onExitComplete } = this.node.presenceContext;\n        const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n        if (!this.node.animationState || isPresent === prevIsPresent) {\n            return;\n        }\n        const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n        if (onExitComplete && !isPresent) {\n            exitAnimation.then(() => onExitComplete(this.id));\n        }\n    }\n    mount() {\n        const { register } = this.node.presenceContext || {};\n        if (register) {\n            this.unmount = register(this.id);\n        }\n    }\n    unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n    animation: {\n        Feature: AnimationFeature,\n    },\n    exit: {\n        Feature: ExitAnimationFeature,\n    },\n};\n\nexport { animations };\n","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass AnimationFeature extends Feature {\n    /**\n     * We dynamically generate the AnimationState manager as it contains a reference\n     * to the underlying animation library. We only want to load that if we load this,\n     * so people can optionally code split it out using the `m` component.\n     */\n    constructor(node) {\n        super(node);\n        node.animationState || (node.animationState = createAnimationState(node));\n    }\n    updateAnimationControlsSubscription() {\n        const { animate } = this.node.getProps();\n        if (isAnimationControls(animate)) {\n            this.unmountControls = animate.subscribe(this.node);\n        }\n    }\n    /**\n     * Subscribe any provided AnimationControls to the component's VisualElement\n     */\n    mount() {\n        this.updateAnimationControlsSubscription();\n    }\n    update() {\n        const { animate } = this.node.getProps();\n        const { animate: prevAnimate } = this.node.prevProps || {};\n        if (animate !== prevAnimate) {\n            this.updateAnimationControlsSubscription();\n        }\n    }\n    unmount() {\n        var _a;\n        this.node.animationState.reset();\n        (_a = this.unmountControls) === null || _a === void 0 ? void 0 : _a.call(this);\n    }\n}\n\nexport { AnimationFeature };\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n    // Multi-dimensional\n    const xDelta = distance(a.x, b.x);\n    const yDelta = distance(a.y, b.y);\n    return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n","import { extractEventInfo } from '../../events/event-info.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../utils/time-conversion.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\nimport { isPrimaryPointer } from '../../events/utils/is-primary-pointer.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n    constructor(event, handlers, { transformPagePoint, contextWindow, dragSnapToOrigin = false } = {}) {\n        /**\n         * @internal\n         */\n        this.startEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEventInfo = null;\n        /**\n         * @internal\n         */\n        this.handlers = {};\n        /**\n         * @internal\n         */\n        this.contextWindow = window;\n        this.updatePoint = () => {\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const info = getPanInfo(this.lastMoveEventInfo, this.history);\n            const isPanStarted = this.startEvent !== null;\n            // Only start panning if the offset is larger than 3 pixels. If we make it\n            // any larger than this we'll want to reset the pointer history\n            // on the first update to avoid visual snapping to the cursoe.\n            const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\n            if (!isPanStarted && !isDistancePastThreshold)\n                return;\n            const { point } = info;\n            const { timestamp } = frameData;\n            this.history.push({ ...point, timestamp });\n            const { onStart, onMove } = this.handlers;\n            if (!isPanStarted) {\n                onStart && onStart(this.lastMoveEvent, info);\n                this.startEvent = this.lastMoveEvent;\n            }\n            onMove && onMove(this.lastMoveEvent, info);\n        };\n        this.handlePointerMove = (event, info) => {\n            this.lastMoveEvent = event;\n            this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n            // Throttle mouse move event to once per frame\n            frame.update(this.updatePoint, true);\n        };\n        this.handlePointerUp = (event, info) => {\n            this.end();\n            const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n            if (this.dragSnapToOrigin)\n                resumeAnimation && resumeAnimation();\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const panInfo = getPanInfo(event.type === \"pointercancel\"\n                ? this.lastMoveEventInfo\n                : transformPoint(info, this.transformPagePoint), this.history);\n            if (this.startEvent && onEnd) {\n                onEnd(event, panInfo);\n            }\n            onSessionEnd && onSessionEnd(event, panInfo);\n        };\n        // If we have more than one touch, don't start detecting this gesture\n        if (!isPrimaryPointer(event))\n            return;\n        this.dragSnapToOrigin = dragSnapToOrigin;\n        this.handlers = handlers;\n        this.transformPagePoint = transformPagePoint;\n        this.contextWindow = contextWindow || window;\n        const info = extractEventInfo(event);\n        const initialInfo = transformPoint(info, this.transformPagePoint);\n        const { point } = initialInfo;\n        const { timestamp } = frameData;\n        this.history = [{ ...point, timestamp }];\n        const { onSessionStart } = handlers;\n        onSessionStart &&\n            onSessionStart(event, getPanInfo(initialInfo, this.history));\n        this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n    }\n    updateHandlers(handlers) {\n        this.handlers = handlers;\n    }\n    end() {\n        this.removeListeners && this.removeListeners();\n        cancelFrame(this.updatePoint);\n    }\n}\nfunction transformPoint(info, transformPagePoint) {\n    return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n    return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n    return {\n        point,\n        delta: subtractPoint(point, lastDevicePoint(history)),\n        offset: subtractPoint(point, startDevicePoint(history)),\n        velocity: getVelocity(history, 0.1),\n    };\n}\nfunction startDevicePoint(history) {\n    return history[0];\n}\nfunction lastDevicePoint(history) {\n    return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n    if (history.length < 2) {\n        return { x: 0, y: 0 };\n    }\n    let i = history.length - 1;\n    let timestampedPoint = null;\n    const lastPoint = lastDevicePoint(history);\n    while (i >= 0) {\n        timestampedPoint = history[i];\n        if (lastPoint.timestamp - timestampedPoint.timestamp >\n            secondsToMilliseconds(timeDelta)) {\n            break;\n        }\n        i--;\n    }\n    if (!timestampedPoint) {\n        return { x: 0, y: 0 };\n    }\n    const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n    if (time === 0) {\n        return { x: 0, y: 0 };\n    }\n    const currentVelocity = {\n        x: (lastPoint.x - timestampedPoint.x) / time,\n        y: (lastPoint.y - timestampedPoint.y) / time,\n    };\n    if (currentVelocity.x === Infinity) {\n        currentVelocity.x = 0;\n    }\n    if (currentVelocity.y === Infinity) {\n        currentVelocity.y = 0;\n    }\n    return currentVelocity;\n}\n\nexport { PanSession };\n","import { mixNumber } from '../../utils/mix/number.mjs';\n\nfunction calcLength(axis) {\n    return axis.max - axis.min;\n}\nfunction isNear(value, target = 0, maxDistance = 0.01) {\n    return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n    delta.origin = origin;\n    delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n    delta.scale = calcLength(target) / calcLength(source);\n    if (isNear(delta.scale, 1, 0.0001) || isNaN(delta.scale))\n        delta.scale = 1;\n    delta.translate =\n        mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n    if (isNear(delta.translate) || isNaN(delta.translate))\n        delta.translate = 0;\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n    calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n    calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent) {\n    target.min = parent.min + relative.min;\n    target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n    calcRelativeAxis(target.x, relative.x, parent.x);\n    calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n    target.min = layout.min - parent.min;\n    target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x);\n    calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","import { progress } from '../../../utils/progress.mjs';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n    if (min !== undefined && point < min) {\n        // If we have a min point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(min, point, elastic.min)\n            : Math.max(point, min);\n    }\n    else if (max !== undefined && point > max) {\n        // If we have a max point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(max, point, elastic.max)\n            : Math.min(point, max);\n    }\n    return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n    return {\n        min: min !== undefined ? axis.min + min : undefined,\n        max: max !== undefined\n            ? axis.max + max - (axis.max - axis.min)\n            : undefined,\n    };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n    return {\n        x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n        y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n    };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n    let min = constraintsAxis.min - layoutAxis.min;\n    let max = constraintsAxis.max - layoutAxis.max;\n    // If the constraints axis is actually smaller than the layout axis then we can\n    // flip the constraints\n    if (constraintsAxis.max - constraintsAxis.min <\n        layoutAxis.max - layoutAxis.min) {\n        [min, max] = [max, min];\n    }\n    return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n    return {\n        x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n        y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n    };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n    let origin = 0.5;\n    const sourceLength = calcLength(source);\n    const targetLength = calcLength(target);\n    if (targetLength > sourceLength) {\n        origin = progress(target.min, target.max - sourceLength, source.min);\n    }\n    else if (sourceLength > targetLength) {\n        origin = progress(source.min, source.max - targetLength, target.min);\n    }\n    return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n    const relativeConstraints = {};\n    if (constraints.min !== undefined) {\n        relativeConstraints.min = constraints.min - layout.min;\n    }\n    if (constraints.max !== undefined) {\n        relativeConstraints.max = constraints.max - layout.min;\n    }\n    return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n    if (dragElastic === false) {\n        dragElastic = 0;\n    }\n    else if (dragElastic === true) {\n        dragElastic = defaultElastic;\n    }\n    return {\n        x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n        y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n    };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n    return {\n        min: resolvePointElastic(dragElastic, minLabel),\n        max: resolvePointElastic(dragElastic, maxLabel),\n    };\n}\nfunction resolvePointElastic(dragElastic, label) {\n    return typeof dragElastic === \"number\"\n        ? dragElastic\n        : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n","const createAxisDelta = () => ({\n    translate: 0,\n    scale: 1,\n    origin: 0,\n    originPoint: 0,\n});\nconst createDelta = () => ({\n    x: createAxisDelta(),\n    y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n    x: createAxis(),\n    y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n","function eachAxis(callback) {\n    return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n    return {\n        x: { min: left, max: right },\n        y: { min: top, max: bottom },\n    };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n    return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n    if (!transformPoint)\n        return point;\n    const topLeft = transformPoint({ x: point.left, y: point.top });\n    const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n    return {\n        top: topLeft.y,\n        left: topLeft.x,\n        bottom: bottomRight.y,\n        right: bottomRight.x,\n    };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n","function isIdentityScale(scale) {\n    return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n    return (!isIdentityScale(scale) ||\n        !isIdentityScale(scaleX) ||\n        !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n    return (hasScale(values) ||\n        has2DTranslate(values) ||\n        values.z ||\n        values.rotate ||\n        values.rotateX ||\n        values.rotateY ||\n        values.skewX ||\n        values.skewY);\n}\nfunction has2DTranslate(values) {\n    return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n    return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n    const distanceFromOrigin = point - originPoint;\n    const scaled = scale * distanceFromOrigin;\n    return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n    if (boxScale !== undefined) {\n        point = scalePoint(point, boxScale, originPoint);\n    }\n    return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n    axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n    applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n    applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n    const treeLength = treePath.length;\n    if (!treeLength)\n        return;\n    // Reset the treeScale\n    treeScale.x = treeScale.y = 1;\n    let node;\n    let delta;\n    for (let i = 0; i < treeLength; i++) {\n        node = treePath[i];\n        delta = node.projectionDelta;\n        /**\n         * TODO: Prefer to remove this, but currently we have motion components with\n         * display: contents in Framer.\n         */\n        const instance = node.instance;\n        if (instance &&\n            instance.style &&\n            instance.style.display === \"contents\") {\n            continue;\n        }\n        if (isSharedTransition &&\n            node.options.layoutScroll &&\n            node.scroll &&\n            node !== node.root) {\n            transformBox(box, {\n                x: -node.scroll.offset.x,\n                y: -node.scroll.offset.y,\n            });\n        }\n        if (delta) {\n            // Incoporate each ancestor's scale into a culmulative treeScale for this component\n            treeScale.x *= delta.x.scale;\n            treeScale.y *= delta.y.scale;\n            // Apply each ancestor's calculated delta into this component's recorded layout box\n            applyBoxDelta(box, delta);\n        }\n        if (isSharedTransition && hasTransform(node.latestValues)) {\n            transformBox(box, node.latestValues);\n        }\n    }\n    /**\n     * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n     * This will help reduce useless scales getting rendered.\n     */\n    treeScale.x = snapToDefault(treeScale.x);\n    treeScale.y = snapToDefault(treeScale.y);\n}\nfunction snapToDefault(scale) {\n    if (Number.isInteger(scale))\n        return scale;\n    return scale > 1.0000000000001 || scale < 0.999999999999 ? scale : 1;\n}\nfunction translateAxis(axis, distance) {\n    axis.min = axis.min + distance;\n    axis.max = axis.max + distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, transforms, [key, scaleKey, originKey]) {\n    const axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n    const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n    // Apply the axis delta to the final axis\n    applyAxisDelta(axis, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n    transformAxis(box.x, transform, xKeys);\n    transformAxis(box.y, transform, yKeys);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n    return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n    const viewportBox = measureViewportBox(element, transformPagePoint);\n    const { scroll } = rootProjectionNode;\n    if (scroll) {\n        translateAxis(viewportBox.x, scroll.offset.x);\n        translateAxis(viewportBox.y, scroll.offset.y);\n    }\n    return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n","// Fixes https://github.com/framer/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n    return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n","import { invariant } from '../../utils/errors.mjs';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { getGlobalLock } from './utils/lock.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n    constructor(visualElement) {\n        // This is a reference to the global drag gesture lock, ensuring only one component\n        // can \"capture\" the drag of one or both axes.\n        // TODO: Look into moving this into pansession?\n        this.openGlobalLock = null;\n        this.isDragging = false;\n        this.currentDirection = null;\n        this.originPoint = { x: 0, y: 0 };\n        /**\n         * The permitted boundaries of travel, in pixels.\n         */\n        this.constraints = false;\n        this.hasMutatedConstraints = false;\n        /**\n         * The per-axis resolved elastic values.\n         */\n        this.elastic = createBox();\n        this.visualElement = visualElement;\n    }\n    start(originEvent, { snapToCursor = false } = {}) {\n        /**\n         * Don't start dragging if this component is exiting\n         */\n        const { presenceContext } = this.visualElement;\n        if (presenceContext && presenceContext.isPresent === false)\n            return;\n        const onSessionStart = (event) => {\n            const { dragSnapToOrigin } = this.getProps();\n            // Stop or pause any animations on both axis values immediately. This allows the user to throw and catch\n            // the component.\n            dragSnapToOrigin ? this.pauseAnimation() : this.stopAnimation();\n            if (snapToCursor) {\n                this.snapToCursor(extractEventInfo(event, \"page\").point);\n            }\n        };\n        const onStart = (event, info) => {\n            // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n            const { drag, dragPropagation, onDragStart } = this.getProps();\n            if (drag && !dragPropagation) {\n                if (this.openGlobalLock)\n                    this.openGlobalLock();\n                this.openGlobalLock = getGlobalLock(drag);\n                // If we don 't have the lock, don't start dragging\n                if (!this.openGlobalLock)\n                    return;\n            }\n            this.isDragging = true;\n            this.currentDirection = null;\n            this.resolveConstraints();\n            if (this.visualElement.projection) {\n                this.visualElement.projection.isAnimationBlocked = true;\n                this.visualElement.projection.target = undefined;\n            }\n            /**\n             * Record gesture origin\n             */\n            eachAxis((axis) => {\n                let current = this.getAxisMotionValue(axis).get() || 0;\n                /**\n                 * If the MotionValue is a percentage value convert to px\n                 */\n                if (percent.test(current)) {\n                    const { projection } = this.visualElement;\n                    if (projection && projection.layout) {\n                        const measuredAxis = projection.layout.layoutBox[axis];\n                        if (measuredAxis) {\n                            const length = calcLength(measuredAxis);\n                            current = length * (parseFloat(current) / 100);\n                        }\n                    }\n                }\n                this.originPoint[axis] = current;\n            });\n            // Fire onDragStart event\n            if (onDragStart) {\n                frame.postRender(() => onDragStart(event, info));\n            }\n            const { animationState } = this.visualElement;\n            animationState && animationState.setActive(\"whileDrag\", true);\n        };\n        const onMove = (event, info) => {\n            // latestPointerEvent = event\n            const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n            // If we didn't successfully receive the gesture lock, early return.\n            if (!dragPropagation && !this.openGlobalLock)\n                return;\n            const { offset } = info;\n            // Attempt to detect drag direction if directionLock is true\n            if (dragDirectionLock && this.currentDirection === null) {\n                this.currentDirection = getCurrentDirection(offset);\n                // If we've successfully set a direction, notify listener\n                if (this.currentDirection !== null) {\n                    onDirectionLock && onDirectionLock(this.currentDirection);\n                }\n                return;\n            }\n            // Update each point with the latest position\n            this.updateAxis(\"x\", info.point, offset);\n            this.updateAxis(\"y\", info.point, offset);\n            /**\n             * Ideally we would leave the renderer to fire naturally at the end of\n             * this frame but if the element is about to change layout as the result\n             * of a re-render we want to ensure the browser can read the latest\n             * bounding box to ensure the pointer and element don't fall out of sync.\n             */\n            this.visualElement.render();\n            /**\n             * This must fire after the render call as it might trigger a state\n             * change which itself might trigger a layout update.\n             */\n            onDrag && onDrag(event, info);\n        };\n        const onSessionEnd = (event, info) => this.stop(event, info);\n        const resumeAnimation = () => eachAxis((axis) => {\n            var _a;\n            return this.getAnimationState(axis) === \"paused\" &&\n                ((_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.play());\n        });\n        const { dragSnapToOrigin } = this.getProps();\n        this.panSession = new PanSession(originEvent, {\n            onSessionStart,\n            onStart,\n            onMove,\n            onSessionEnd,\n            resumeAnimation,\n        }, {\n            transformPagePoint: this.visualElement.getTransformPagePoint(),\n            dragSnapToOrigin,\n            contextWindow: getContextWindow(this.visualElement),\n        });\n    }\n    stop(event, info) {\n        const isDragging = this.isDragging;\n        this.cancel();\n        if (!isDragging)\n            return;\n        const { velocity } = info;\n        this.startAnimation(velocity);\n        const { onDragEnd } = this.getProps();\n        if (onDragEnd) {\n            frame.postRender(() => onDragEnd(event, info));\n        }\n    }\n    cancel() {\n        this.isDragging = false;\n        const { projection, animationState } = this.visualElement;\n        if (projection) {\n            projection.isAnimationBlocked = false;\n        }\n        this.panSession && this.panSession.end();\n        this.panSession = undefined;\n        const { dragPropagation } = this.getProps();\n        if (!dragPropagation && this.openGlobalLock) {\n            this.openGlobalLock();\n            this.openGlobalLock = null;\n        }\n        animationState && animationState.setActive(\"whileDrag\", false);\n    }\n    updateAxis(axis, _point, offset) {\n        const { drag } = this.getProps();\n        // If we're not dragging this axis, do an early return.\n        if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n            return;\n        const axisValue = this.getAxisMotionValue(axis);\n        let next = this.originPoint[axis] + offset[axis];\n        // Apply constraints\n        if (this.constraints && this.constraints[axis]) {\n            next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n        }\n        axisValue.set(next);\n    }\n    resolveConstraints() {\n        var _a;\n        const { dragConstraints, dragElastic } = this.getProps();\n        const layout = this.visualElement.projection &&\n            !this.visualElement.projection.layout\n            ? this.visualElement.projection.measure(false)\n            : (_a = this.visualElement.projection) === null || _a === void 0 ? void 0 : _a.layout;\n        const prevConstraints = this.constraints;\n        if (dragConstraints && isRefObject(dragConstraints)) {\n            if (!this.constraints) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        }\n        else {\n            if (dragConstraints && layout) {\n                this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n            }\n            else {\n                this.constraints = false;\n            }\n        }\n        this.elastic = resolveDragElastic(dragElastic);\n        /**\n         * If we're outputting to external MotionValues, we want to rebase the measured constraints\n         * from viewport-relative to component-relative.\n         */\n        if (prevConstraints !== this.constraints &&\n            layout &&\n            this.constraints &&\n            !this.hasMutatedConstraints) {\n            eachAxis((axis) => {\n                if (this.constraints !== false &&\n                    this.getAxisMotionValue(axis)) {\n                    this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n                }\n            });\n        }\n    }\n    resolveRefConstraints() {\n        const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n        if (!constraints || !isRefObject(constraints))\n            return false;\n        const constraintsElement = constraints.current;\n        invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\");\n        const { projection } = this.visualElement;\n        // TODO\n        if (!projection || !projection.layout)\n            return false;\n        const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n        let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n        /**\n         * If there's an onMeasureDragConstraints listener we call it and\n         * if different constraints are returned, set constraints to that\n         */\n        if (onMeasureDragConstraints) {\n            const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n            this.hasMutatedConstraints = !!userConstraints;\n            if (userConstraints) {\n                measuredConstraints = convertBoundingBoxToBox(userConstraints);\n            }\n        }\n        return measuredConstraints;\n    }\n    startAnimation(velocity) {\n        const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n        const constraints = this.constraints || {};\n        const momentumAnimations = eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, this.currentDirection)) {\n                return;\n            }\n            let transition = (constraints && constraints[axis]) || {};\n            if (dragSnapToOrigin)\n                transition = { min: 0, max: 0 };\n            /**\n             * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n             * of spring animations so we should look into adding a disable spring option to `inertia`.\n             * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n             * using the value of `dragElastic`.\n             */\n            const bounceStiffness = dragElastic ? 200 : 1000000;\n            const bounceDamping = dragElastic ? 40 : 10000000;\n            const inertia = {\n                type: \"inertia\",\n                velocity: dragMomentum ? velocity[axis] : 0,\n                bounceStiffness,\n                bounceDamping,\n                timeConstant: 750,\n                restDelta: 1,\n                restSpeed: 10,\n                ...dragTransition,\n                ...transition,\n            };\n            // If we're not animating on an externally-provided `MotionValue` we can use the\n            // component's animation controls which will handle interactions with whileHover (etc),\n            // otherwise we just have to animate the `MotionValue` itself.\n            return this.startAxisValueAnimation(axis, inertia);\n        });\n        // Run all animations and then resolve the new drag constraints.\n        return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n    }\n    startAxisValueAnimation(axis, transition) {\n        const axisValue = this.getAxisMotionValue(axis);\n        return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement));\n    }\n    stopAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n    }\n    pauseAnimation() {\n        eachAxis((axis) => { var _a; return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.pause(); });\n    }\n    getAnimationState(axis) {\n        var _a;\n        return (_a = this.getAxisMotionValue(axis).animation) === null || _a === void 0 ? void 0 : _a.state;\n    }\n    /**\n     * Drag works differently depending on which props are provided.\n     *\n     * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n     * - Otherwise, we apply the delta to the x/y motion values.\n     */\n    getAxisMotionValue(axis) {\n        const dragKey = `_drag${axis.toUpperCase()}`;\n        const props = this.visualElement.getProps();\n        const externalMotionValue = props[dragKey];\n        return externalMotionValue\n            ? externalMotionValue\n            : this.visualElement.getValue(axis, (props.initial\n                ? props.initial[axis]\n                : undefined) || 0);\n    }\n    snapToCursor(point) {\n        eachAxis((axis) => {\n            const { drag } = this.getProps();\n            // If we're not dragging this axis, do an early return.\n            if (!shouldDrag(axis, drag, this.currentDirection))\n                return;\n            const { projection } = this.visualElement;\n            const axisValue = this.getAxisMotionValue(axis);\n            if (projection && projection.layout) {\n                const { min, max } = projection.layout.layoutBox[axis];\n                axisValue.set(point[axis] - mixNumber(min, max, 0.5));\n            }\n        });\n    }\n    /**\n     * When the viewport resizes we want to check if the measured constraints\n     * have changed and, if so, reposition the element within those new constraints\n     * relative to where it was before the resize.\n     */\n    scalePositionWithinConstraints() {\n        if (!this.visualElement.current)\n            return;\n        const { drag, dragConstraints } = this.getProps();\n        const { projection } = this.visualElement;\n        if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n            return;\n        /**\n         * Stop current animations as there can be visual glitching if we try to do\n         * this mid-animation\n         */\n        this.stopAnimation();\n        /**\n         * Record the relative position of the dragged element relative to the\n         * constraints box and save as a progress value.\n         */\n        const boxProgress = { x: 0, y: 0 };\n        eachAxis((axis) => {\n            const axisValue = this.getAxisMotionValue(axis);\n            if (axisValue && this.constraints !== false) {\n                const latest = axisValue.get();\n                boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n            }\n        });\n        /**\n         * Update the layout of this element and resolve the latest drag constraints\n         */\n        const { transformTemplate } = this.visualElement.getProps();\n        this.visualElement.current.style.transform = transformTemplate\n            ? transformTemplate({}, \"\")\n            : \"none\";\n        projection.root && projection.root.updateScroll();\n        projection.updateLayout();\n        this.resolveConstraints();\n        /**\n         * For each axis, calculate the current progress of the layout axis\n         * within the new constraints.\n         */\n        eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, null))\n                return;\n            /**\n             * Calculate a new transform based on the previous box progress\n             */\n            const axisValue = this.getAxisMotionValue(axis);\n            const { min, max } = this.constraints[axis];\n            axisValue.set(mixNumber(min, max, boxProgress[axis]));\n        });\n    }\n    addListeners() {\n        if (!this.visualElement.current)\n            return;\n        elementDragControls.set(this.visualElement, this);\n        const element = this.visualElement.current;\n        /**\n         * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n         */\n        const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n            const { drag, dragListener = true } = this.getProps();\n            drag && dragListener && this.start(event);\n        });\n        const measureDragConstraints = () => {\n            const { dragConstraints } = this.getProps();\n            if (isRefObject(dragConstraints) && dragConstraints.current) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        };\n        const { projection } = this.visualElement;\n        const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n        if (projection && !projection.layout) {\n            projection.root && projection.root.updateScroll();\n            projection.updateLayout();\n        }\n        frame.read(measureDragConstraints);\n        /**\n         * Attach a window resize listener to scale the draggable target within its defined\n         * constraints as the window resizes.\n         */\n        const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n        /**\n         * If the element's layout changes, calculate the delta and apply that to\n         * the drag gesture's origin point.\n         */\n        const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n            if (this.isDragging && hasLayoutChanged) {\n                eachAxis((axis) => {\n                    const motionValue = this.getAxisMotionValue(axis);\n                    if (!motionValue)\n                        return;\n                    this.originPoint[axis] += delta[axis].translate;\n                    motionValue.set(motionValue.get() + delta[axis].translate);\n                });\n                this.visualElement.render();\n            }\n        }));\n        return () => {\n            stopResizeListener();\n            stopPointerListener();\n            stopMeasureLayoutListener();\n            stopLayoutUpdateListener && stopLayoutUpdateListener();\n        };\n    }\n    getProps() {\n        const props = this.visualElement.getProps();\n        const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n        return {\n            ...props,\n            drag,\n            dragDirectionLock,\n            dragPropagation,\n            dragConstraints,\n            dragElastic,\n            dragMomentum,\n        };\n    }\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n    return ((drag === true || drag === direction) &&\n        (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n    let direction = null;\n    if (Math.abs(offset.y) > lockThreshold) {\n        direction = \"y\";\n    }\n    else if (Math.abs(offset.x) > lockThreshold) {\n        direction = \"x\";\n    }\n    return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { PanSession } from './PanSession.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n    if (handler) {\n        frame.postRender(() => handler(event, info));\n    }\n};\nclass PanGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.removePointerDownListener = noop;\n    }\n    onPointerDown(pointerDownEvent) {\n        this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n            transformPagePoint: this.node.getTransformPagePoint(),\n            contextWindow: getContextWindow(this.node),\n        });\n    }\n    createPanHandlers() {\n        const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n        return {\n            onSessionStart: asyncHandler(onPanSessionStart),\n            onStart: asyncHandler(onPanStart),\n            onMove: onPan,\n            onEnd: (event, info) => {\n                delete this.session;\n                if (onPanEnd) {\n                    frame.postRender(() => onPanEnd(event, info));\n                }\n            },\n        };\n    }\n    mount() {\n        this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n    }\n    update() {\n        this.session && this.session.updateHandlers(this.createPanHandlers());\n    }\n    unmount() {\n        this.removePointerDownListener();\n        this.session && this.session.end();\n    }\n}\n\nexport { PanGesture };\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n    /**\n     * Global flag as to whether the tree has animated since the last time\n     * we resized the window\n     */\n    hasAnimatedSinceResize: true,\n    /**\n     * We set this to true once, on the first update. Any nodes added to the tree beyond that\n     * update will be given a `data-projection-id` attribute.\n     */\n    hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n    if (axis.max === axis.min)\n        return 0;\n    return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n    correct: (latest, node) => {\n        if (!node.target)\n            return latest;\n        /**\n         * If latest is a string, if it's a percentage we can return immediately as it's\n         * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n         */\n        if (typeof latest === \"string\") {\n            if (px.test(latest)) {\n                latest = parseFloat(latest);\n            }\n            else {\n                return latest;\n            }\n        }\n        /**\n         * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n         * pixel value as a percentage of each axis\n         */\n        const x = pixelsToPercent(latest, node.target.x);\n        const y = pixelsToPercent(latest, node.target.y);\n        return `${x}% ${y}%`;\n    },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\n\nconst correctBoxShadow = {\n    correct: (latest, { treeScale, projectionDelta }) => {\n        const original = latest;\n        const shadow = complex.parse(latest);\n        // TODO: Doesn't support multiple shadows\n        if (shadow.length > 5)\n            return original;\n        const template = complex.createTransformer(latest);\n        const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n        // Calculate the overall context scale\n        const xScale = projectionDelta.x.scale * treeScale.x;\n        const yScale = projectionDelta.y.scale * treeScale.y;\n        shadow[0 + offset] /= xScale;\n        shadow[1 + offset] /= yScale;\n        /**\n         * Ideally we'd correct x and y scales individually, but because blur and\n         * spread apply to both we have to take a scale average and apply that instead.\n         * We could potentially improve the outcome of this by incorporating the ratio between\n         * the two scales.\n         */\n        const averageScale = mixNumber(xScale, yScale, 0.5);\n        // Blur\n        if (typeof shadow[2 + offset] === \"number\")\n            shadow[2 + offset] /= averageScale;\n        // Spread\n        if (typeof shadow[3 + offset] === \"number\")\n            shadow[3 + offset] /= averageScale;\n        return template(shadow);\n    },\n};\n\nexport { correctBoxShadow };\n","import { jsx } from 'react/jsx-runtime';\nimport { useContext, Component } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\nimport { microtask } from '../../../frameloop/microtask.mjs';\nimport { frame } from '../../../frameloop/frame.mjs';\n\nclass MeasureLayoutWithContext extends Component {\n    /**\n     * This only mounts projection nodes for components that\n     * need measuring, we might want to do it for all components\n     * in order to incorporate transforms\n     */\n    componentDidMount() {\n        const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n        const { projection } = visualElement;\n        addScaleCorrector(defaultScaleCorrectors);\n        if (projection) {\n            if (layoutGroup.group)\n                layoutGroup.group.add(projection);\n            if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n                switchLayoutGroup.register(projection);\n            }\n            projection.root.didUpdate();\n            projection.addEventListener(\"animationComplete\", () => {\n                this.safeToRemove();\n            });\n            projection.setOptions({\n                ...projection.options,\n                onExitComplete: () => this.safeToRemove(),\n            });\n        }\n        globalProjectionState.hasEverUpdated = true;\n    }\n    getSnapshotBeforeUpdate(prevProps) {\n        const { layoutDependency, visualElement, drag, isPresent } = this.props;\n        const projection = visualElement.projection;\n        if (!projection)\n            return null;\n        /**\n         * TODO: We use this data in relegate to determine whether to\n         * promote a previous element. There's no guarantee its presence data\n         * will have updated by this point - if a bug like this arises it will\n         * have to be that we markForRelegation and then find a new lead some other way,\n         * perhaps in didUpdate\n         */\n        projection.isPresent = isPresent;\n        if (drag ||\n            prevProps.layoutDependency !== layoutDependency ||\n            layoutDependency === undefined) {\n            projection.willUpdate();\n        }\n        else {\n            this.safeToRemove();\n        }\n        if (prevProps.isPresent !== isPresent) {\n            if (isPresent) {\n                projection.promote();\n            }\n            else if (!projection.relegate()) {\n                /**\n                 * If there's another stack member taking over from this one,\n                 * it's in charge of the exit animation and therefore should\n                 * be in charge of the safe to remove. Otherwise we call it here.\n                 */\n                frame.postRender(() => {\n                    const stack = projection.getStack();\n                    if (!stack || !stack.members.length) {\n                        this.safeToRemove();\n                    }\n                });\n            }\n        }\n        return null;\n    }\n    componentDidUpdate() {\n        const { projection } = this.props.visualElement;\n        if (projection) {\n            projection.root.didUpdate();\n            microtask.postRender(() => {\n                if (!projection.currentAnimation && projection.isLead()) {\n                    this.safeToRemove();\n                }\n            });\n        }\n    }\n    componentWillUnmount() {\n        const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n        const { projection } = visualElement;\n        if (projection) {\n            projection.scheduleCheckAfterUnmount();\n            if (layoutGroup && layoutGroup.group)\n                layoutGroup.group.remove(projection);\n            if (promoteContext && promoteContext.deregister)\n                promoteContext.deregister(projection);\n        }\n    }\n    safeToRemove() {\n        const { safeToRemove } = this.props;\n        safeToRemove && safeToRemove();\n    }\n    render() {\n        return null;\n    }\n}\nfunction MeasureLayout(props) {\n    const [isPresent, safeToRemove] = usePresence();\n    const layoutGroup = useContext(LayoutGroupContext);\n    return (jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\n    borderRadius: {\n        ...correctBorderRadius,\n        applyTo: [\n            \"borderTopLeftRadius\",\n            \"borderTopRightRadius\",\n            \"borderBottomLeftRadius\",\n            \"borderBottomRightRadius\",\n        ],\n    },\n    borderTopLeftRadius: correctBorderRadius,\n    borderTopRightRadius: correctBorderRadius,\n    borderBottomLeftRadius: correctBorderRadius,\n    borderBottomRightRadius: correctBorderRadius,\n    boxShadow: correctBoxShadow,\n};\n\nexport { MeasureLayout };\n","import { useContext, useId, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const [isPresent, safeToRemove] = usePresence()\n *\n *   useEffect(() => {\n *     !isPresent && setTimeout(safeToRemove, 1000)\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence() {\n    const context = useContext(PresenceContext);\n    if (context === null)\n        return [true, null];\n    const { isPresent, onExitComplete, register } = context;\n    // It's safe to call the following hooks conditionally (after an early return) because the context will always\n    // either be null or non-null for the lifespan of the component.\n    const id = useId();\n    useEffect(() => register(id), []);\n    const safeToRemove = () => onExitComplete && onExitComplete(id);\n    return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n *   const isPresent = useIsPresent()\n *\n *   useEffect(() => {\n *     !isPresent && console.log(\"I've been removed!\")\n *   }, [isPresent])\n *\n *   return <div />\n * }\n * ```\n *\n * @public\n */\nfunction useIsPresent() {\n    return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n    return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\n","import { circOut } from '../../easing/circ.mjs';\nimport { progress } from '../../utils/progress.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n    if (shouldCrossfadeOpacity) {\n        target.opacity = mixNumber(0, \n        // TODO Reinstate this if only child\n        lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n        target.opacityExit = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n    }\n    else if (isOnlyMember) {\n        target.opacity = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n    }\n    /**\n     * Mix border radius\n     */\n    for (let i = 0; i < numBorders; i++) {\n        const borderLabel = `border${borders[i]}Radius`;\n        let followRadius = getRadius(follow, borderLabel);\n        let leadRadius = getRadius(lead, borderLabel);\n        if (followRadius === undefined && leadRadius === undefined)\n            continue;\n        followRadius || (followRadius = 0);\n        leadRadius || (leadRadius = 0);\n        const canMix = followRadius === 0 ||\n            leadRadius === 0 ||\n            isPx(followRadius) === isPx(leadRadius);\n        if (canMix) {\n            target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n            if (percent.test(leadRadius) || percent.test(followRadius)) {\n                target[borderLabel] += \"%\";\n            }\n        }\n        else {\n            target[borderLabel] = leadRadius;\n        }\n    }\n    /**\n     * Mix rotation\n     */\n    if (follow.rotate || lead.rotate) {\n        target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n    }\n}\nfunction getRadius(values, radiusName) {\n    return values[radiusName] !== undefined\n        ? values[radiusName]\n        : values.borderRadius;\n}\n// /**\n//  * We only want to mix the background color if there's a follow element\n//  * that we're not crossfading opacity between. For instance with switch\n//  * AnimateSharedLayout animations, this helps the illusion of a continuous\n//  * element being animated but also cuts down on the number of paints triggered\n//  * for elements where opacity is doing that work for us.\n//  */\n// if (\n//     !hasFollowElement &&\n//     latestLeadValues.backgroundColor &&\n//     latestFollowValues.backgroundColor\n// ) {\n//     /**\n//      * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n//      * We could probably create a mixer that runs at the start of the animation but\n//      * the idea behind the crossfader is that it runs dynamically between two potentially\n//      * changing targets (ie opacity or borderRadius may be animating independently via variants)\n//      */\n//     leadState.backgroundColor = followState.backgroundColor = mixColor(\n//         latestFollowValues.backgroundColor as string,\n//         latestLeadValues.backgroundColor as string\n//     )(p)\n// }\nconst easeCrossfadeIn = compress(0, 0.5, circOut);\nconst easeCrossfadeOut = compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n    return (p) => {\n        // Could replace ifs with clamp\n        if (p < min)\n            return 0;\n        if (p > max)\n            return 1;\n        return easing(progress(min, max, p));\n    };\n}\n\nexport { mixValues };\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n    axis.min = originAxis.min;\n    axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n    copyAxisInto(box.x, originBox.x);\n    copyAxisInto(box.y, originBox.y);\n}\n\nexport { copyAxisInto, copyBoxInto };\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n    point -= translate;\n    point = scalePoint(point, 1 / scale, originPoint);\n    if (boxScale !== undefined) {\n        point = scalePoint(point, 1 / boxScale, originPoint);\n    }\n    return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n    if (percent.test(translate)) {\n        translate = parseFloat(translate);\n        const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n        translate = relativeProgress - sourceAxis.min;\n    }\n    if (typeof translate !== \"number\")\n        return;\n    let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n    if (axis === originAxis)\n        originPoint -= translate;\n    axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n    removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n    removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n    removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n    return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n    return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction boxEquals(a, b) {\n    return (a.x.min === b.x.min &&\n        a.x.max === b.x.max &&\n        a.y.min === b.y.min &&\n        a.y.max === b.y.max);\n}\nfunction boxEqualsRounded(a, b) {\n    return (Math.round(a.x.min) === Math.round(b.x.min) &&\n        Math.round(a.x.max) === Math.round(b.x.max) &&\n        Math.round(a.y.min) === Math.round(b.y.min) &&\n        Math.round(a.y.max) === Math.round(b.y.max));\n}\nfunction aspectRatio(box) {\n    return calcLength(box.x) / calcLength(box.y);\n}\n\nexport { aspectRatio, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\n\nclass NodeStack {\n    constructor() {\n        this.members = [];\n    }\n    add(node) {\n        addUniqueItem(this.members, node);\n        node.scheduleRender();\n    }\n    remove(node) {\n        removeItem(this.members, node);\n        if (node === this.prevLead) {\n            this.prevLead = undefined;\n        }\n        if (node === this.lead) {\n            const prevLead = this.members[this.members.length - 1];\n            if (prevLead) {\n                this.promote(prevLead);\n            }\n        }\n    }\n    relegate(node) {\n        const indexOfNode = this.members.findIndex((member) => node === member);\n        if (indexOfNode === 0)\n            return false;\n        /**\n         * Find the next projection node that is present\n         */\n        let prevLead;\n        for (let i = indexOfNode; i >= 0; i--) {\n            const member = this.members[i];\n            if (member.isPresent !== false) {\n                prevLead = member;\n                break;\n            }\n        }\n        if (prevLead) {\n            this.promote(prevLead);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    promote(node, preserveFollowOpacity) {\n        const prevLead = this.lead;\n        if (node === prevLead)\n            return;\n        this.prevLead = prevLead;\n        this.lead = node;\n        node.show();\n        if (prevLead) {\n            prevLead.instance && prevLead.scheduleRender();\n            node.scheduleRender();\n            node.resumeFrom = prevLead;\n            if (preserveFollowOpacity) {\n                node.resumeFrom.preserveOpacity = true;\n            }\n            if (prevLead.snapshot) {\n                node.snapshot = prevLead.snapshot;\n                node.snapshot.latestValues =\n                    prevLead.animationValues || prevLead.latestValues;\n            }\n            if (node.root && node.root.isUpdating) {\n                node.isLayoutDirty = true;\n            }\n            const { crossfade } = node.options;\n            if (crossfade === false) {\n                prevLead.hide();\n            }\n            /**\n             * TODO:\n             *   - Test border radius when previous node was deleted\n             *   - boxShadow mixing\n             *   - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n             *   - Shared between element A in transformed container and element B (transform stays the same or changes)\n             *   - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n             * ---\n             *   - Crossfade opacity of root nodes\n             *   - layoutId changes after animation\n             *   - layoutId changes mid animation\n             */\n        }\n    }\n    exitAnimationComplete() {\n        this.members.forEach((node) => {\n            const { options, resumingFrom } = node;\n            options.onExitComplete && options.onExitComplete();\n            if (resumingFrom) {\n                resumingFrom.options.onExitComplete &&\n                    resumingFrom.options.onExitComplete();\n            }\n        });\n    }\n    scheduleRender() {\n        this.members.forEach((node) => {\n            node.instance && node.scheduleRender(false);\n        });\n    }\n    /**\n     * Clear any leads that have been removed this render to prevent them from being\n     * used in future animations and to prevent memory leaks\n     */\n    removeLeadSnapshot() {\n        if (this.lead && this.lead.snapshot) {\n            this.lead.snapshot = undefined;\n        }\n    }\n}\n\nexport { NodeStack };\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n    let transform = \"\";\n    /**\n     * The translations we use to calculate are always relative to the viewport coordinate space.\n     * But when we apply scales, we also scale the coordinate space of an element and its children.\n     * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n     * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n     */\n    const xTranslate = delta.x.translate / treeScale.x;\n    const yTranslate = delta.y.translate / treeScale.y;\n    const zTranslate = (latestTransform === null || latestTransform === void 0 ? void 0 : latestTransform.z) || 0;\n    if (xTranslate || yTranslate || zTranslate) {\n        transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n    }\n    /**\n     * Apply scale correction for the tree transform.\n     * This will apply scale to the screen-orientated axes.\n     */\n    if (treeScale.x !== 1 || treeScale.y !== 1) {\n        transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n    }\n    if (latestTransform) {\n        const { transformPerspective, rotate, rotateX, rotateY, skewX, skewY } = latestTransform;\n        if (transformPerspective)\n            transform = `perspective(${transformPerspective}px) ${transform}`;\n        if (rotate)\n            transform += `rotate(${rotate}deg) `;\n        if (rotateX)\n            transform += `rotateX(${rotateX}deg) `;\n        if (rotateY)\n            transform += `rotateY(${rotateY}deg) `;\n        if (skewX)\n            transform += `skewX(${skewX}deg) `;\n        if (skewY)\n            transform += `skewY(${skewY}deg) `;\n    }\n    /**\n     * Apply scale to match the size of the element to the size we want it.\n     * This will apply scale to the element-orientated axes.\n     */\n    const elementScaleX = delta.x.scale * treeScale.x;\n    const elementScaleY = delta.y.scale * treeScale.y;\n    if (elementScaleX !== 1 || elementScaleY !== 1) {\n        transform += `scale(${elementScaleX}, ${elementScaleY})`;\n    }\n    return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n    constructor() {\n        this.children = [];\n        this.isDirty = false;\n    }\n    add(child) {\n        addUniqueItem(this.children, child);\n        this.isDirty = true;\n    }\n    remove(child) {\n        removeItem(this.children, child);\n        this.isDirty = true;\n    }\n    forEach(callback) {\n        this.isDirty && this.children.sort(compareByDepth);\n        this.isDirty = false;\n        this.children.forEach(callback);\n    }\n}\n\nexport { FlatTree };\n","import { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcRelativePosition, calcRelativeBox, calcBoxDelta, calcLength, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { getValueTransition } from '../../animation/utils/transitions.mjs';\nimport { boxEqualsRounded, isDeltaZero, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { record } from '../../debug/record.mjs';\nimport { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { animateSingleValue } from '../../animation/interfaces/single-value.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { cancelFrame, frameData, steps, frame } from '../../frameloop/frame.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\n\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\nconst hiddenVisibility = { visibility: \"hidden\" };\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\n/**\n * Use a mutable data object for debug data so as to not create a new\n * object every frame.\n */\nconst projectionFrameData = {\n    type: \"projectionFrame\",\n    totalNodes: 0,\n    resolvedTargetDeltas: 0,\n    recalculatedProjection: 0,\n};\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n    const { latestValues } = visualElement;\n    // Record the distorting transform and then temporarily set it to 0\n    if (latestValues[key]) {\n        values[key] = latestValues[key];\n        visualElement.setStaticValue(key, 0);\n        if (sharedAnimationValues) {\n            sharedAnimationValues[key] = 0;\n        }\n    }\n}\nfunction isOptimisedAppearTree(projectionNode) {\n    projectionNode.hasCheckedOptimisedAppear = true;\n    if (projectionNode.root === projectionNode)\n        return false;\n    const { visualElement } = projectionNode.options;\n    if (!visualElement) {\n        return false;\n    }\n    else if (getOptimisedAppearId(visualElement)) {\n        return true;\n    }\n    else if (projectionNode.parent &&\n        !projectionNode.parent.hasCheckedOptimisedAppear) {\n        return isOptimisedAppearTree(projectionNode.parent);\n    }\n    else {\n        return false;\n    }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n    return class ProjectionNode {\n        constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {\n            /**\n             * A unique ID generated for every projection node.\n             */\n            this.id = id++;\n            /**\n             * An id that represents a unique session instigated by startUpdate.\n             */\n            this.animationId = 0;\n            /**\n             * A Set containing all this component's children. This is used to iterate\n             * through the children.\n             *\n             * TODO: This could be faster to iterate as a flat array stored on the root node.\n             */\n            this.children = new Set();\n            /**\n             * Options for the node. We use this to configure what kind of layout animations\n             * we should perform (if any).\n             */\n            this.options = {};\n            /**\n             * We use this to detect when its safe to shut down part of a projection tree.\n             * We have to keep projecting children for scale correction and relative projection\n             * until all their parents stop performing layout animations.\n             */\n            this.isTreeAnimating = false;\n            this.isAnimationBlocked = false;\n            /**\n             * Flag to true if we think this layout has been changed. We can't always know this,\n             * currently we set it to true every time a component renders, or if it has a layoutDependency\n             * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n             * and if one node is dirtied, they all are.\n             */\n            this.isLayoutDirty = false;\n            /**\n             * Flag to true if we think the projection calculations for this node needs\n             * recalculating as a result of an updated transform or layout animation.\n             */\n            this.isProjectionDirty = false;\n            /**\n             * Flag to true if the layout *or* transform has changed. This then gets propagated\n             * throughout the projection tree, forcing any element below to recalculate on the next frame.\n             */\n            this.isSharedProjectionDirty = false;\n            /**\n             * Flag transform dirty. This gets propagated throughout the whole tree but is only\n             * respected by shared nodes.\n             */\n            this.isTransformDirty = false;\n            /**\n             * Block layout updates for instant layout transitions throughout the tree.\n             */\n            this.updateManuallyBlocked = false;\n            this.updateBlockedByResize = false;\n            /**\n             * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n             * call.\n             */\n            this.isUpdating = false;\n            /**\n             * If this is an SVG element we currently disable projection transforms\n             */\n            this.isSVG = false;\n            /**\n             * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n             * its projection styles.\n             */\n            this.needsReset = false;\n            /**\n             * Flags whether this node should have its transform reset prior to measuring.\n             */\n            this.shouldResetTransform = false;\n            /**\n             * Store whether this node has been checked for optimised appear animations. As\n             * effects fire bottom-up, and we want to look up the tree for appear animations,\n             * this makes sure we only check each path once, stopping at nodes that\n             * have already been checked.\n             */\n            this.hasCheckedOptimisedAppear = false;\n            /**\n             * An object representing the calculated contextual/accumulated/tree scale.\n             * This will be used to scale calculcated projection transforms, as these are\n             * calculated in screen-space but need to be scaled for elements to layoutly\n             * make it to their calculated destinations.\n             *\n             * TODO: Lazy-init\n             */\n            this.treeScale = { x: 1, y: 1 };\n            /**\n             *\n             */\n            this.eventHandlers = new Map();\n            this.hasTreeAnimated = false;\n            // Note: Currently only running on root node\n            this.updateScheduled = false;\n            this.scheduleUpdate = () => this.update();\n            this.projectionUpdateScheduled = false;\n            this.checkUpdateFailed = () => {\n                if (this.isUpdating) {\n                    this.isUpdating = false;\n                    this.clearAllSnapshots();\n                }\n            };\n            /**\n             * This is a multi-step process as shared nodes might be of different depths. Nodes\n             * are sorted by depth order, so we need to resolve the entire tree before moving to\n             * the next step.\n             */\n            this.updateProjection = () => {\n                this.projectionUpdateScheduled = false;\n                /**\n                 * Reset debug counts. Manually resetting rather than creating a new\n                 * object each frame.\n                 */\n                projectionFrameData.totalNodes =\n                    projectionFrameData.resolvedTargetDeltas =\n                        projectionFrameData.recalculatedProjection =\n                            0;\n                this.nodes.forEach(propagateDirtyNodes);\n                this.nodes.forEach(resolveTargetDelta);\n                this.nodes.forEach(calcProjection);\n                this.nodes.forEach(cleanDirtyNodes);\n                record(projectionFrameData);\n            };\n            this.hasProjected = false;\n            this.isVisible = true;\n            this.animationProgress = 0;\n            /**\n             * Shared layout\n             */\n            // TODO Only running on root node\n            this.sharedNodes = new Map();\n            this.latestValues = latestValues;\n            this.root = parent ? parent.root || parent : this;\n            this.path = parent ? [...parent.path, parent] : [];\n            this.parent = parent;\n            this.depth = parent ? parent.depth + 1 : 0;\n            for (let i = 0; i < this.path.length; i++) {\n                this.path[i].shouldResetTransform = true;\n            }\n            if (this.root === this)\n                this.nodes = new FlatTree();\n        }\n        addEventListener(name, handler) {\n            if (!this.eventHandlers.has(name)) {\n                this.eventHandlers.set(name, new SubscriptionManager());\n            }\n            return this.eventHandlers.get(name).add(handler);\n        }\n        notifyListeners(name, ...args) {\n            const subscriptionManager = this.eventHandlers.get(name);\n            subscriptionManager && subscriptionManager.notify(...args);\n        }\n        hasListeners(name) {\n            return this.eventHandlers.has(name);\n        }\n        /**\n         * Lifecycles\n         */\n        mount(instance, isLayoutDirty = this.root.hasTreeAnimated) {\n            if (this.instance)\n                return;\n            this.isSVG = isSVGElement(instance);\n            this.instance = instance;\n            const { layoutId, layout, visualElement } = this.options;\n            if (visualElement && !visualElement.current) {\n                visualElement.mount(instance);\n            }\n            this.root.nodes.add(this);\n            this.parent && this.parent.children.add(this);\n            if (isLayoutDirty && (layout || layoutId)) {\n                this.isLayoutDirty = true;\n            }\n            if (attachResizeListener) {\n                let cancelDelay;\n                const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n                attachResizeListener(instance, () => {\n                    this.root.updateBlockedByResize = true;\n                    cancelDelay && cancelDelay();\n                    cancelDelay = delay(resizeUnblockUpdate, 250);\n                    if (globalProjectionState.hasAnimatedSinceResize) {\n                        globalProjectionState.hasAnimatedSinceResize = false;\n                        this.nodes.forEach(finishAnimation);\n                    }\n                });\n            }\n            if (layoutId) {\n                this.root.registerSharedNode(layoutId, this);\n            }\n            // Only register the handler if it requires layout animation\n            if (this.options.animate !== false &&\n                visualElement &&\n                (layoutId || layout)) {\n                this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeTargetChanged, layout: newLayout, }) => {\n                    if (this.isTreeAnimationBlocked()) {\n                        this.target = undefined;\n                        this.relativeTarget = undefined;\n                        return;\n                    }\n                    // TODO: Check here if an animation exists\n                    const layoutTransition = this.options.transition ||\n                        visualElement.getDefaultTransition() ||\n                        defaultLayoutTransition;\n                    const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n                    /**\n                     * The target layout of the element might stay the same,\n                     * but its position relative to its parent has changed.\n                     */\n                    const targetChanged = !this.targetLayout ||\n                        !boxEqualsRounded(this.targetLayout, newLayout) ||\n                        hasRelativeTargetChanged;\n                    /**\n                     * If the layout hasn't seemed to have changed, it might be that the\n                     * element is visually in the same place in the document but its position\n                     * relative to its parent has indeed changed. So here we check for that.\n                     */\n                    const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeTargetChanged;\n                    if (this.options.layoutRoot ||\n                        (this.resumeFrom && this.resumeFrom.instance) ||\n                        hasOnlyRelativeTargetChanged ||\n                        (hasLayoutChanged &&\n                            (targetChanged || !this.currentAnimation))) {\n                        if (this.resumeFrom) {\n                            this.resumingFrom = this.resumeFrom;\n                            this.resumingFrom.resumingFrom = undefined;\n                        }\n                        this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n                        const animationOptions = {\n                            ...getValueTransition(layoutTransition, \"layout\"),\n                            onPlay: onLayoutAnimationStart,\n                            onComplete: onLayoutAnimationComplete,\n                        };\n                        if (visualElement.shouldReduceMotion ||\n                            this.options.layoutRoot) {\n                            animationOptions.delay = 0;\n                            animationOptions.type = false;\n                        }\n                        this.startAnimation(animationOptions);\n                    }\n                    else {\n                        /**\n                         * If the layout hasn't changed and we have an animation that hasn't started yet,\n                         * finish it immediately. Otherwise it will be animating from a location\n                         * that was probably never commited to screen and look like a jumpy box.\n                         */\n                        if (!hasLayoutChanged) {\n                            finishAnimation(this);\n                        }\n                        if (this.isLead() && this.options.onExitComplete) {\n                            this.options.onExitComplete();\n                        }\n                    }\n                    this.targetLayout = newLayout;\n                });\n            }\n        }\n        unmount() {\n            this.options.layoutId && this.willUpdate();\n            this.root.nodes.remove(this);\n            const stack = this.getStack();\n            stack && stack.remove(this);\n            this.parent && this.parent.children.delete(this);\n            this.instance = undefined;\n            cancelFrame(this.updateProjection);\n        }\n        // only on the root\n        blockUpdate() {\n            this.updateManuallyBlocked = true;\n        }\n        unblockUpdate() {\n            this.updateManuallyBlocked = false;\n        }\n        isUpdateBlocked() {\n            return this.updateManuallyBlocked || this.updateBlockedByResize;\n        }\n        isTreeAnimationBlocked() {\n            return (this.isAnimationBlocked ||\n                (this.parent && this.parent.isTreeAnimationBlocked()) ||\n                false);\n        }\n        // Note: currently only running on root node\n        startUpdate() {\n            if (this.isUpdateBlocked())\n                return;\n            this.isUpdating = true;\n            this.nodes && this.nodes.forEach(resetSkewAndRotation);\n            this.animationId++;\n        }\n        getTransformTemplate() {\n            const { visualElement } = this.options;\n            return visualElement && visualElement.getProps().transformTemplate;\n        }\n        willUpdate(shouldNotifyListeners = true) {\n            this.root.hasTreeAnimated = true;\n            if (this.root.isUpdateBlocked()) {\n                this.options.onExitComplete && this.options.onExitComplete();\n                return;\n            }\n            /**\n             * If we're running optimised appear animations then these must be\n             * cancelled before measuring the DOM. This is so we can measure\n             * the true layout of the element rather than the WAAPI animation\n             * which will be unaffected by the resetSkewAndRotate step.\n             *\n             * Note: This is a DOM write. Worst case scenario is this is sandwiched\n             * between other snapshot reads which will cause unnecessary style recalculations.\n             * This has to happen here though, as we don't yet know which nodes will need\n             * snapshots in startUpdate(), but we only want to cancel optimised animations\n             * if a layout animation measurement is actually going to be affected by them.\n             */\n            if (window.HandoffCancelAllAnimations &&\n                isOptimisedAppearTree(this)) {\n                window.HandoffCancelAllAnimations();\n            }\n            !this.root.isUpdating && this.root.startUpdate();\n            if (this.isLayoutDirty)\n                return;\n            this.isLayoutDirty = true;\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                node.shouldResetTransform = true;\n                node.updateScroll(\"snapshot\");\n                if (node.options.layoutRoot) {\n                    node.willUpdate(false);\n                }\n            }\n            const { layoutId, layout } = this.options;\n            if (layoutId === undefined && !layout)\n                return;\n            const transformTemplate = this.getTransformTemplate();\n            this.prevTransformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            this.updateSnapshot();\n            shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n        }\n        update() {\n            this.updateScheduled = false;\n            const updateWasBlocked = this.isUpdateBlocked();\n            // When doing an instant transition, we skip the layout update,\n            // but should still clean up the measurements so that the next\n            // snapshot could be taken correctly.\n            if (updateWasBlocked) {\n                this.unblockUpdate();\n                this.clearAllSnapshots();\n                this.nodes.forEach(clearMeasurements);\n                return;\n            }\n            if (!this.isUpdating) {\n                this.nodes.forEach(clearIsLayoutDirty);\n            }\n            this.isUpdating = false;\n            /**\n             * Write\n             */\n            this.nodes.forEach(resetTransformStyle);\n            /**\n             * Read ==================\n             */\n            // Update layout measurements of updated children\n            this.nodes.forEach(updateLayout);\n            /**\n             * Write\n             */\n            // Notify listeners that the layout is updated\n            this.nodes.forEach(notifyLayoutUpdate);\n            this.clearAllSnapshots();\n            /**\n             * Manually flush any pending updates. Ideally\n             * we could leave this to the following requestAnimationFrame but this seems\n             * to leave a flash of incorrectly styled content.\n             */\n            const now = time.now();\n            frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n            frameData.timestamp = now;\n            frameData.isProcessing = true;\n            steps.update.process(frameData);\n            steps.preRender.process(frameData);\n            steps.render.process(frameData);\n            frameData.isProcessing = false;\n        }\n        didUpdate() {\n            if (!this.updateScheduled) {\n                this.updateScheduled = true;\n                microtask.read(this.scheduleUpdate);\n            }\n        }\n        clearAllSnapshots() {\n            this.nodes.forEach(clearSnapshot);\n            this.sharedNodes.forEach(removeLeadSnapshots);\n        }\n        scheduleUpdateProjection() {\n            if (!this.projectionUpdateScheduled) {\n                this.projectionUpdateScheduled = true;\n                frame.preRender(this.updateProjection, false, true);\n            }\n        }\n        scheduleCheckAfterUnmount() {\n            /**\n             * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n             * we manually call didUpdate to give a chance to the siblings to animate.\n             * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n             */\n            frame.postRender(() => {\n                if (this.isLayoutDirty) {\n                    this.root.didUpdate();\n                }\n                else {\n                    this.root.checkUpdateFailed();\n                }\n            });\n        }\n        /**\n         * Update measurements\n         */\n        updateSnapshot() {\n            if (this.snapshot || !this.instance)\n                return;\n            this.snapshot = this.measure();\n        }\n        updateLayout() {\n            if (!this.instance)\n                return;\n            // TODO: Incorporate into a forwarded scroll offset\n            this.updateScroll();\n            if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n                !this.isLayoutDirty) {\n                return;\n            }\n            /**\n             * When a node is mounted, it simply resumes from the prevLead's\n             * snapshot instead of taking a new one, but the ancestors scroll\n             * might have updated while the prevLead is unmounted. We need to\n             * update the scroll again to make sure the layout we measure is\n             * up to date.\n             */\n            if (this.resumeFrom && !this.resumeFrom.instance) {\n                for (let i = 0; i < this.path.length; i++) {\n                    const node = this.path[i];\n                    node.updateScroll();\n                }\n            }\n            const prevLayout = this.layout;\n            this.layout = this.measure(false);\n            this.layoutCorrected = createBox();\n            this.isLayoutDirty = false;\n            this.projectionDelta = undefined;\n            this.notifyListeners(\"measure\", this.layout.layoutBox);\n            const { visualElement } = this.options;\n            visualElement &&\n                visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n        }\n        updateScroll(phase = \"measure\") {\n            let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n            if (this.scroll &&\n                this.scroll.animationId === this.root.animationId &&\n                this.scroll.phase === phase) {\n                needsMeasurement = false;\n            }\n            if (needsMeasurement) {\n                this.scroll = {\n                    animationId: this.root.animationId,\n                    phase,\n                    isRoot: checkIsScrollRoot(this.instance),\n                    offset: measureScroll(this.instance),\n                };\n            }\n        }\n        resetTransform() {\n            if (!resetTransform)\n                return;\n            const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;\n            const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n            const transformTemplate = this.getTransformTemplate();\n            const transformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n            if (isResetRequested &&\n                (hasProjection ||\n                    hasTransform(this.latestValues) ||\n                    transformTemplateHasChanged)) {\n                resetTransform(this.instance, transformTemplateValue);\n                this.shouldResetTransform = false;\n                this.scheduleRender();\n            }\n        }\n        measure(removeTransform = true) {\n            const pageBox = this.measurePageBox();\n            let layoutBox = this.removeElementScroll(pageBox);\n            /**\n             * Measurements taken during the pre-render stage\n             * still have transforms applied so we remove them\n             * via calculation.\n             */\n            if (removeTransform) {\n                layoutBox = this.removeTransform(layoutBox);\n            }\n            roundBox(layoutBox);\n            return {\n                animationId: this.root.animationId,\n                measuredBox: pageBox,\n                layoutBox,\n                latestValues: {},\n                source: this.id,\n            };\n        }\n        measurePageBox() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return createBox();\n            const box = visualElement.measureViewportBox();\n            // Remove viewport scroll to give page-relative coordinates\n            const { scroll } = this.root;\n            if (scroll) {\n                translateAxis(box.x, scroll.offset.x);\n                translateAxis(box.y, scroll.offset.y);\n            }\n            return box;\n        }\n        removeElementScroll(box) {\n            const boxWithoutScroll = createBox();\n            copyBoxInto(boxWithoutScroll, box);\n            /**\n             * Performance TODO: Keep a cumulative scroll offset down the tree\n             * rather than loop back up the path.\n             */\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                const { scroll, options } = node;\n                if (node !== this.root && scroll && options.layoutScroll) {\n                    /**\n                     * If this is a new scroll root, we want to remove all previous scrolls\n                     * from the viewport box.\n                     */\n                    if (scroll.isRoot) {\n                        copyBoxInto(boxWithoutScroll, box);\n                        const { scroll: rootScroll } = this.root;\n                        /**\n                         * Undo the application of page scroll that was originally added\n                         * to the measured bounding box.\n                         */\n                        if (rootScroll) {\n                            translateAxis(boxWithoutScroll.x, -rootScroll.offset.x);\n                            translateAxis(boxWithoutScroll.y, -rootScroll.offset.y);\n                        }\n                    }\n                    translateAxis(boxWithoutScroll.x, scroll.offset.x);\n                    translateAxis(boxWithoutScroll.y, scroll.offset.y);\n                }\n            }\n            return boxWithoutScroll;\n        }\n        applyTransform(box, transformOnly = false) {\n            const withTransforms = createBox();\n            copyBoxInto(withTransforms, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!transformOnly &&\n                    node.options.layoutScroll &&\n                    node.scroll &&\n                    node !== node.root) {\n                    transformBox(withTransforms, {\n                        x: -node.scroll.offset.x,\n                        y: -node.scroll.offset.y,\n                    });\n                }\n                if (!hasTransform(node.latestValues))\n                    continue;\n                transformBox(withTransforms, node.latestValues);\n            }\n            if (hasTransform(this.latestValues)) {\n                transformBox(withTransforms, this.latestValues);\n            }\n            return withTransforms;\n        }\n        removeTransform(box) {\n            const boxWithoutTransform = createBox();\n            copyBoxInto(boxWithoutTransform, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!node.instance)\n                    continue;\n                if (!hasTransform(node.latestValues))\n                    continue;\n                hasScale(node.latestValues) && node.updateSnapshot();\n                const sourceBox = createBox();\n                const nodeBox = node.measurePageBox();\n                copyBoxInto(sourceBox, nodeBox);\n                removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, sourceBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                removeBoxTransforms(boxWithoutTransform, this.latestValues);\n            }\n            return boxWithoutTransform;\n        }\n        setTargetDelta(delta) {\n            this.targetDelta = delta;\n            this.root.scheduleUpdateProjection();\n            this.isProjectionDirty = true;\n        }\n        setOptions(options) {\n            this.options = {\n                ...this.options,\n                ...options,\n                crossfade: options.crossfade !== undefined ? options.crossfade : true,\n            };\n        }\n        clearMeasurements() {\n            this.scroll = undefined;\n            this.layout = undefined;\n            this.snapshot = undefined;\n            this.prevTransformTemplateValue = undefined;\n            this.targetDelta = undefined;\n            this.target = undefined;\n            this.isLayoutDirty = false;\n        }\n        forceRelativeParentToResolveTarget() {\n            if (!this.relativeParent)\n                return;\n            /**\n             * If the parent target isn't up-to-date, force it to update.\n             * This is an unfortunate de-optimisation as it means any updating relative\n             * projection will cause all the relative parents to recalculate back\n             * up the tree.\n             */\n            if (this.relativeParent.resolvedRelativeTargetAt !==\n                frameData.timestamp) {\n                this.relativeParent.resolveTargetDelta(true);\n            }\n        }\n        resolveTargetDelta(forceRecalculation = false) {\n            var _a;\n            /**\n             * Once the dirty status of nodes has been spread through the tree, we also\n             * need to check if we have a shared node of a different depth that has itself\n             * been dirtied.\n             */\n            const lead = this.getLead();\n            this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n            this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n            this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            /**\n             * We don't use transform for this step of processing so we don't\n             * need to check whether any nodes have changed transform.\n             */\n            const canSkip = !(forceRecalculation ||\n                (isShared && this.isSharedProjectionDirty) ||\n                this.isProjectionDirty ||\n                ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n                this.attemptToResolveRelativeTarget);\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If we have no layout, we can't perform projection, so early return\n             */\n            if (!this.layout || !(layout || layoutId))\n                return;\n            this.resolvedRelativeTargetAt = frameData.timestamp;\n            /**\n             * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n             * a relativeParent. This will allow a component to perform scale correction\n             * even if no animation has started.\n             */\n            if (!this.targetDelta && !this.relativeTarget) {\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    relativeParent.layout &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * If we have no relative target or no target delta our target isn't valid\n             * for this frame.\n             */\n            if (!this.relativeTarget && !this.targetDelta)\n                return;\n            /**\n             * Lazy-init target data structure\n             */\n            if (!this.target) {\n                this.target = createBox();\n                this.targetWithTransforms = createBox();\n            }\n            /**\n             * If we've got a relative box for this component, resolve it into a target relative to the parent.\n             */\n            if (this.relativeTarget &&\n                this.relativeTargetOrigin &&\n                this.relativeParent &&\n                this.relativeParent.target) {\n                this.forceRelativeParentToResolveTarget();\n                calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target);\n                /**\n                 * If we've only got a targetDelta, resolve it into a target\n                 */\n            }\n            else if (this.targetDelta) {\n                if (Boolean(this.resumingFrom)) {\n                    // TODO: This is creating a new object every frame\n                    this.target = this.applyTransform(this.layout.layoutBox);\n                }\n                else {\n                    copyBoxInto(this.target, this.layout.layoutBox);\n                }\n                applyBoxDelta(this.target, this.targetDelta);\n            }\n            else {\n                /**\n                 * If no target, use own layout as target\n                 */\n                copyBoxInto(this.target, this.layout.layoutBox);\n            }\n            /**\n             * If we've been told to attempt to resolve a relative target, do so.\n             */\n            if (this.attemptToResolveRelativeTarget) {\n                this.attemptToResolveRelativeTarget = false;\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    Boolean(relativeParent.resumingFrom) ===\n                        Boolean(this.resumingFrom) &&\n                    !relativeParent.options.layoutScroll &&\n                    relativeParent.target &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * Increase debug counter for resolved target deltas\n             */\n            projectionFrameData.resolvedTargetDeltas++;\n        }\n        getClosestProjectingParent() {\n            if (!this.parent ||\n                hasScale(this.parent.latestValues) ||\n                has2DTranslate(this.parent.latestValues)) {\n                return undefined;\n            }\n            if (this.parent.isProjecting()) {\n                return this.parent;\n            }\n            else {\n                return this.parent.getClosestProjectingParent();\n            }\n        }\n        isProjecting() {\n            return Boolean((this.relativeTarget ||\n                this.targetDelta ||\n                this.options.layoutRoot) &&\n                this.layout);\n        }\n        calcProjection() {\n            var _a;\n            const lead = this.getLead();\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            let canSkip = true;\n            /**\n             * If this is a normal layout animation and neither this node nor its nearest projecting\n             * is dirty then we can't skip.\n             */\n            if (this.isProjectionDirty || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If this is a shared layout animation and this node's shared projection is dirty then\n             * we can't skip.\n             */\n            if (isShared &&\n                (this.isSharedProjectionDirty || this.isTransformDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If we have resolved the target this frame we must recalculate the\n             * projection to ensure it visually represents the internal calculations.\n             */\n            if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n                canSkip = false;\n            }\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If this section of the tree isn't animating we can\n             * delete our target sources for the following frame.\n             */\n            this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n                this.currentAnimation ||\n                this.pendingAnimation);\n            if (!this.isTreeAnimating) {\n                this.targetDelta = this.relativeTarget = undefined;\n            }\n            if (!this.layout || !(layout || layoutId))\n                return;\n            /**\n             * Reset the corrected box with the latest values from box, as we're then going\n             * to perform mutative operations on it.\n             */\n            copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n            /**\n             * Record previous tree scales before updating.\n             */\n            const prevTreeScaleX = this.treeScale.x;\n            const prevTreeScaleY = this.treeScale.y;\n            /**\n             * Apply all the parent deltas to this box to produce the corrected box. This\n             * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n             */\n            applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n            /**\n             * If this layer needs to perform scale correction but doesn't have a target,\n             * use the layout as the target.\n             */\n            if (lead.layout &&\n                !lead.target &&\n                (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n                lead.target = lead.layout.layoutBox;\n                lead.targetWithTransforms = createBox();\n            }\n            const { target } = lead;\n            if (!target) {\n                /**\n                 * If we don't have a target to project into, but we were previously\n                 * projecting, we want to remove the stored transform and schedule\n                 * a render to ensure the elements reflect the removed transform.\n                 */\n                if (this.projectionTransform) {\n                    this.projectionDelta = createDelta();\n                    this.projectionTransform = \"none\";\n                    this.scheduleRender();\n                }\n                return;\n            }\n            if (!this.projectionDelta) {\n                this.projectionDelta = createDelta();\n                this.projectionDeltaWithTransform = createDelta();\n            }\n            const prevProjectionTransform = this.projectionTransform;\n            /**\n             * Update the delta between the corrected box and the target box before user-set transforms were applied.\n             * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n             * for our layout reprojection, but still allow them to be scaled correctly by the user.\n             * It might be that to simplify this we may want to accept that user-set scale is also corrected\n             * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n             * to allow people to choose whether these styles are corrected based on just the\n             * layout reprojection or the final bounding box.\n             */\n            calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n            this.projectionTransform = buildProjectionTransform(this.projectionDelta, this.treeScale);\n            if (this.projectionTransform !== prevProjectionTransform ||\n                this.treeScale.x !== prevTreeScaleX ||\n                this.treeScale.y !== prevTreeScaleY) {\n                this.hasProjected = true;\n                this.scheduleRender();\n                this.notifyListeners(\"projectionUpdate\", target);\n            }\n            /**\n             * Increase debug counter for recalculated projections\n             */\n            projectionFrameData.recalculatedProjection++;\n        }\n        hide() {\n            this.isVisible = false;\n            // TODO: Schedule render\n        }\n        show() {\n            this.isVisible = true;\n            // TODO: Schedule render\n        }\n        scheduleRender(notifyAll = true) {\n            this.options.scheduleRender && this.options.scheduleRender();\n            if (notifyAll) {\n                const stack = this.getStack();\n                stack && stack.scheduleRender();\n            }\n            if (this.resumingFrom && !this.resumingFrom.instance) {\n                this.resumingFrom = undefined;\n            }\n        }\n        setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n            const snapshot = this.snapshot;\n            const snapshotLatestValues = snapshot\n                ? snapshot.latestValues\n                : {};\n            const mixedValues = { ...this.latestValues };\n            const targetDelta = createDelta();\n            if (!this.relativeParent ||\n                !this.relativeParent.options.layoutRoot) {\n                this.relativeTarget = this.relativeTargetOrigin = undefined;\n            }\n            this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n            const relativeLayout = createBox();\n            const snapshotSource = snapshot ? snapshot.source : undefined;\n            const layoutSource = this.layout ? this.layout.source : undefined;\n            const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n            const stack = this.getStack();\n            const isOnlyMember = !stack || stack.members.length <= 1;\n            const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n                !isOnlyMember &&\n                this.options.crossfade === true &&\n                !this.path.some(hasOpacityCrossfade));\n            this.animationProgress = 0;\n            let prevRelativeTarget;\n            this.mixTargetDelta = (latest) => {\n                const progress = latest / 1000;\n                mixAxisDelta(targetDelta.x, delta.x, progress);\n                mixAxisDelta(targetDelta.y, delta.y, progress);\n                this.setTargetDelta(targetDelta);\n                if (this.relativeTarget &&\n                    this.relativeTargetOrigin &&\n                    this.layout &&\n                    this.relativeParent &&\n                    this.relativeParent.layout) {\n                    calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n                    mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n                    /**\n                     * If this is an unchanged relative target we can consider the\n                     * projection not dirty.\n                     */\n                    if (prevRelativeTarget &&\n                        boxEquals(this.relativeTarget, prevRelativeTarget)) {\n                        this.isProjectionDirty = false;\n                    }\n                    if (!prevRelativeTarget)\n                        prevRelativeTarget = createBox();\n                    copyBoxInto(prevRelativeTarget, this.relativeTarget);\n                }\n                if (isSharedLayoutAnimation) {\n                    this.animationValues = mixedValues;\n                    mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n                }\n                this.root.scheduleUpdateProjection();\n                this.scheduleRender();\n                this.animationProgress = progress;\n            };\n            this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n        }\n        startAnimation(options) {\n            this.notifyListeners(\"animationStart\");\n            this.currentAnimation && this.currentAnimation.stop();\n            if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n                this.resumingFrom.currentAnimation.stop();\n            }\n            if (this.pendingAnimation) {\n                cancelFrame(this.pendingAnimation);\n                this.pendingAnimation = undefined;\n            }\n            /**\n             * Start the animation in the next frame to have a frame with progress 0,\n             * where the target is the same as when the animation started, so we can\n             * calculate the relative positions correctly for instant transitions.\n             */\n            this.pendingAnimation = frame.update(() => {\n                globalProjectionState.hasAnimatedSinceResize = true;\n                this.currentAnimation = animateSingleValue(0, animationTarget, {\n                    ...options,\n                    onUpdate: (latest) => {\n                        this.mixTargetDelta(latest);\n                        options.onUpdate && options.onUpdate(latest);\n                    },\n                    onComplete: () => {\n                        options.onComplete && options.onComplete();\n                        this.completeAnimation();\n                    },\n                });\n                if (this.resumingFrom) {\n                    this.resumingFrom.currentAnimation = this.currentAnimation;\n                }\n                this.pendingAnimation = undefined;\n            });\n        }\n        completeAnimation() {\n            if (this.resumingFrom) {\n                this.resumingFrom.currentAnimation = undefined;\n                this.resumingFrom.preserveOpacity = undefined;\n            }\n            const stack = this.getStack();\n            stack && stack.exitAnimationComplete();\n            this.resumingFrom =\n                this.currentAnimation =\n                    this.animationValues =\n                        undefined;\n            this.notifyListeners(\"animationComplete\");\n        }\n        finishAnimation() {\n            if (this.currentAnimation) {\n                this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n                this.currentAnimation.stop();\n            }\n            this.completeAnimation();\n        }\n        applyTransformsToTarget() {\n            const lead = this.getLead();\n            let { targetWithTransforms, target, layout, latestValues } = lead;\n            if (!targetWithTransforms || !target || !layout)\n                return;\n            /**\n             * If we're only animating position, and this element isn't the lead element,\n             * then instead of projecting into the lead box we instead want to calculate\n             * a new target that aligns the two boxes but maintains the layout shape.\n             */\n            if (this !== lead &&\n                this.layout &&\n                layout &&\n                shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n                target = this.target || createBox();\n                const xLength = calcLength(this.layout.layoutBox.x);\n                target.x.min = lead.target.x.min;\n                target.x.max = target.x.min + xLength;\n                const yLength = calcLength(this.layout.layoutBox.y);\n                target.y.min = lead.target.y.min;\n                target.y.max = target.y.min + yLength;\n            }\n            copyBoxInto(targetWithTransforms, target);\n            /**\n             * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n             * This is the final box that we will then project into by calculating a transform delta and\n             * applying it to the corrected box.\n             */\n            transformBox(targetWithTransforms, latestValues);\n            /**\n             * Update the delta between the corrected box and the final target box, after\n             * user-set transforms are applied to it. This will be used by the renderer to\n             * create a transform style that will reproject the element from its layout layout\n             * into the desired bounding box.\n             */\n            calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n        }\n        registerSharedNode(layoutId, node) {\n            if (!this.sharedNodes.has(layoutId)) {\n                this.sharedNodes.set(layoutId, new NodeStack());\n            }\n            const stack = this.sharedNodes.get(layoutId);\n            stack.add(node);\n            const config = node.options.initialPromotionConfig;\n            node.promote({\n                transition: config ? config.transition : undefined,\n                preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n                    ? config.shouldPreserveFollowOpacity(node)\n                    : undefined,\n            });\n        }\n        isLead() {\n            const stack = this.getStack();\n            return stack ? stack.lead === this : true;\n        }\n        getLead() {\n            var _a;\n            const { layoutId } = this.options;\n            return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n        }\n        getPrevLead() {\n            var _a;\n            const { layoutId } = this.options;\n            return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.prevLead : undefined;\n        }\n        getStack() {\n            const { layoutId } = this.options;\n            if (layoutId)\n                return this.root.sharedNodes.get(layoutId);\n        }\n        promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n            const stack = this.getStack();\n            if (stack)\n                stack.promote(this, preserveFollowOpacity);\n            if (needsReset) {\n                this.projectionDelta = undefined;\n                this.needsReset = true;\n            }\n            if (transition)\n                this.setOptions({ transition });\n        }\n        relegate() {\n            const stack = this.getStack();\n            if (stack) {\n                return stack.relegate(this);\n            }\n            else {\n                return false;\n            }\n        }\n        resetSkewAndRotation() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return;\n            // If there's no detected skew or rotation values, we can early return without a forced render.\n            let hasDistortingTransform = false;\n            /**\n             * An unrolled check for rotation values. Most elements don't have any rotation and\n             * skipping the nested loop and new object creation is 50% faster.\n             */\n            const { latestValues } = visualElement;\n            if (latestValues.z ||\n                latestValues.rotate ||\n                latestValues.rotateX ||\n                latestValues.rotateY ||\n                latestValues.rotateZ ||\n                latestValues.skewX ||\n                latestValues.skewY) {\n                hasDistortingTransform = true;\n            }\n            // If there's no distorting values, we don't need to do any more.\n            if (!hasDistortingTransform)\n                return;\n            const resetValues = {};\n            if (latestValues.z) {\n                resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n            }\n            // Check the skew and rotate value of all axes and reset to 0\n            for (let i = 0; i < transformAxes.length; i++) {\n                resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n                resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n            }\n            // Force a render of this element to apply the transform with all skews and rotations\n            // set to 0.\n            visualElement.render();\n            // Put back all the values we reset\n            for (const key in resetValues) {\n                visualElement.setStaticValue(key, resetValues[key]);\n                if (this.animationValues) {\n                    this.animationValues[key] = resetValues[key];\n                }\n            }\n            // Schedule a render for the next frame. This ensures we won't visually\n            // see the element with the reset rotate value applied.\n            visualElement.scheduleRender();\n        }\n        getProjectionStyles(styleProp) {\n            var _a, _b;\n            if (!this.instance || this.isSVG)\n                return undefined;\n            if (!this.isVisible) {\n                return hiddenVisibility;\n            }\n            const styles = {\n                visibility: \"\",\n            };\n            const transformTemplate = this.getTransformTemplate();\n            if (this.needsReset) {\n                this.needsReset = false;\n                styles.opacity = \"\";\n                styles.pointerEvents =\n                    resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n                styles.transform = transformTemplate\n                    ? transformTemplate(this.latestValues, \"\")\n                    : \"none\";\n                return styles;\n            }\n            const lead = this.getLead();\n            if (!this.projectionDelta || !this.layout || !lead.target) {\n                const emptyStyles = {};\n                if (this.options.layoutId) {\n                    emptyStyles.opacity =\n                        this.latestValues.opacity !== undefined\n                            ? this.latestValues.opacity\n                            : 1;\n                    emptyStyles.pointerEvents =\n                        resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\";\n                }\n                if (this.hasProjected && !hasTransform(this.latestValues)) {\n                    emptyStyles.transform = transformTemplate\n                        ? transformTemplate({}, \"\")\n                        : \"none\";\n                    this.hasProjected = false;\n                }\n                return emptyStyles;\n            }\n            const valuesToRender = lead.animationValues || lead.latestValues;\n            this.applyTransformsToTarget();\n            styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n            if (transformTemplate) {\n                styles.transform = transformTemplate(valuesToRender, styles.transform);\n            }\n            const { x, y } = this.projectionDelta;\n            styles.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n            if (lead.animationValues) {\n                /**\n                 * If the lead component is animating, assign this either the entering/leaving\n                 * opacity\n                 */\n                styles.opacity =\n                    lead === this\n                        ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 1\n                        : this.preserveOpacity\n                            ? this.latestValues.opacity\n                            : valuesToRender.opacityExit;\n            }\n            else {\n                /**\n                 * Or we're not animating at all, set the lead component to its layout\n                 * opacity and other components to hidden.\n                 */\n                styles.opacity =\n                    lead === this\n                        ? valuesToRender.opacity !== undefined\n                            ? valuesToRender.opacity\n                            : \"\"\n                        : valuesToRender.opacityExit !== undefined\n                            ? valuesToRender.opacityExit\n                            : 0;\n            }\n            /**\n             * Apply scale correction\n             */\n            for (const key in scaleCorrectors) {\n                if (valuesToRender[key] === undefined)\n                    continue;\n                const { correct, applyTo } = scaleCorrectors[key];\n                /**\n                 * Only apply scale correction to the value if we have an\n                 * active projection transform. Otherwise these values become\n                 * vulnerable to distortion if the element changes size without\n                 * a corresponding layout animation.\n                 */\n                const corrected = styles.transform === \"none\"\n                    ? valuesToRender[key]\n                    : correct(valuesToRender[key], lead);\n                if (applyTo) {\n                    const num = applyTo.length;\n                    for (let i = 0; i < num; i++) {\n                        styles[applyTo[i]] = corrected;\n                    }\n                }\n                else {\n                    styles[key] = corrected;\n                }\n            }\n            /**\n             * Disable pointer events on follow components. This is to ensure\n             * that if a follow component covers a lead component it doesn't block\n             * pointer events on the lead.\n             */\n            if (this.options.layoutId) {\n                styles.pointerEvents =\n                    lead === this\n                        ? resolveMotionValue(styleProp === null || styleProp === void 0 ? void 0 : styleProp.pointerEvents) || \"\"\n                        : \"none\";\n            }\n            return styles;\n        }\n        clearSnapshot() {\n            this.resumeFrom = this.snapshot = undefined;\n        }\n        // Only run on root\n        resetTree() {\n            this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.stop(); });\n            this.root.nodes.forEach(clearMeasurements);\n            this.root.sharedNodes.clear();\n        }\n    };\n}\nfunction updateLayout(node) {\n    node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n    var _a;\n    const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.snapshot) || node.snapshot;\n    if (node.isLead() &&\n        node.layout &&\n        snapshot &&\n        node.hasListeners(\"didUpdate\")) {\n        const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n        const { animationType } = node.options;\n        const isShared = snapshot.source !== node.layout.source;\n        // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n        // animations for instance if layout=\"size\" and an element has only changed position\n        if (animationType === \"size\") {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(axisSnapshot);\n                axisSnapshot.min = layout[axis].min;\n                axisSnapshot.max = axisSnapshot.min + length;\n            });\n        }\n        else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(layout[axis]);\n                axisSnapshot.max = axisSnapshot.min + length;\n                /**\n                 * Ensure relative target gets resized and rerendererd\n                 */\n                if (node.relativeTarget && !node.currentAnimation) {\n                    node.isProjectionDirty = true;\n                    node.relativeTarget[axis].max =\n                        node.relativeTarget[axis].min + length;\n                }\n            });\n        }\n        const layoutDelta = createDelta();\n        calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n        const visualDelta = createDelta();\n        if (isShared) {\n            calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n        }\n        else {\n            calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n        }\n        const hasLayoutChanged = !isDeltaZero(layoutDelta);\n        let hasRelativeTargetChanged = false;\n        if (!node.resumeFrom) {\n            const relativeParent = node.getClosestProjectingParent();\n            /**\n             * If the relativeParent is itself resuming from a different element then\n             * the relative snapshot is not relavent\n             */\n            if (relativeParent && !relativeParent.resumeFrom) {\n                const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n                if (parentSnapshot && parentLayout) {\n                    const relativeSnapshot = createBox();\n                    calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n                    const relativeLayout = createBox();\n                    calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n                    if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n                        hasRelativeTargetChanged = true;\n                    }\n                    if (relativeParent.options.layoutRoot) {\n                        node.relativeTarget = relativeLayout;\n                        node.relativeTargetOrigin = relativeSnapshot;\n                        node.relativeParent = relativeParent;\n                    }\n                }\n            }\n        }\n        node.notifyListeners(\"didUpdate\", {\n            layout,\n            snapshot,\n            delta: visualDelta,\n            layoutDelta,\n            hasLayoutChanged,\n            hasRelativeTargetChanged,\n        });\n    }\n    else if (node.isLead()) {\n        const { onExitComplete } = node.options;\n        onExitComplete && onExitComplete();\n    }\n    /**\n     * Clearing transition\n     * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n     * and why we need it at all\n     */\n    node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n    /**\n     * Increase debug counter for nodes encountered this frame\n     */\n    projectionFrameData.totalNodes++;\n    if (!node.parent)\n        return;\n    /**\n     * If this node isn't projecting, propagate isProjectionDirty. It will have\n     * no performance impact but it will allow the next child that *is* projecting\n     * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n     * correcting.\n     */\n    if (!node.isProjecting()) {\n        node.isProjectionDirty = node.parent.isProjectionDirty;\n    }\n    /**\n     * Propagate isSharedProjectionDirty and isTransformDirty\n     * throughout the whole tree. A future revision can take another look at\n     * this but for safety we still recalcualte shared nodes.\n     */\n    node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n        node.parent.isProjectionDirty ||\n        node.parent.isSharedProjectionDirty));\n    node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n    node.isProjectionDirty =\n        node.isSharedProjectionDirty =\n            node.isTransformDirty =\n                false;\n}\nfunction clearSnapshot(node) {\n    node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n    node.clearMeasurements();\n}\nfunction clearIsLayoutDirty(node) {\n    node.isLayoutDirty = false;\n}\nfunction resetTransformStyle(node) {\n    const { visualElement } = node.options;\n    if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n        visualElement.notify(\"BeforeLayoutMeasure\");\n    }\n    node.resetTransform();\n}\nfunction finishAnimation(node) {\n    node.finishAnimation();\n    node.targetDelta = node.relativeTarget = node.target = undefined;\n    node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n    node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n    node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n    node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n    stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n    output.translate = mixNumber(delta.translate, 0, p);\n    output.scale = mixNumber(delta.scale, 1, p);\n    output.origin = delta.origin;\n    output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n    output.min = mixNumber(from.min, to.min, p);\n    output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n    mixAxis(output.x, from.x, to.x, p);\n    mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n    return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n    duration: 0.45,\n    ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n    navigator.userAgent &&\n    navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n    ? Math.round\n    : noop;\nfunction roundAxis(axis) {\n    // Round to the nearest .5 pixels to support subpixel layouts\n    axis.min = roundPoint(axis.min);\n    axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n    roundAxis(box.x);\n    roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n    return (animationType === \"position\" ||\n        (animationType === \"preserve-aspect\" &&\n            !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","function record(data) {\n    if (window.MotionDebug) {\n        window.MotionDebug.record(data);\n    }\n}\n\nexport { record };\n","function isSVGElement(element) {\n    return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\nexport { isSVGElement };\n","import { time } from '../frameloop/sync-time.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n    const start = time.now();\n    const checkElapsed = ({ timestamp }) => {\n        const elapsed = timestamp - start;\n        if (elapsed >= timeout) {\n            cancelFrame(checkElapsed);\n            callback(elapsed - timeout);\n        }\n    };\n    frame.read(checkElapsed, true);\n    return () => cancelFrame(checkElapsed);\n}\n\nexport { delay };\n","import { animateMotionValue } from './motion-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n    const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n    motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n    return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n    attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n    measureScroll: () => ({\n        x: document.documentElement.scrollLeft || document.body.scrollLeft,\n        y: document.documentElement.scrollTop || document.body.scrollTop,\n    }),\n    checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n    current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n    measureScroll: (instance) => ({\n        x: instance.scrollLeft,\n        y: instance.scrollTop,\n    }),\n    defaultParent: () => {\n        if (!rootProjectionNode.current) {\n            const documentNode = new DocumentProjectionNode({});\n            documentNode.mount(window);\n            documentNode.setOptions({ layoutScroll: true });\n            rootProjectionNode.current = documentNode;\n        }\n        return rootProjectionNode.current;\n    },\n    resetTransform: (instance, value) => {\n        instance.style.transform = value !== undefined ? value : \"none\";\n    },\n    checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n    pan: {\n        Feature: PanGesture,\n    },\n    drag: {\n        Feature: DragGesture,\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { drag };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n    constructor(node) {\n        super(node);\n        this.removeGroupControls = noop;\n        this.removeListeners = noop;\n        this.controls = new VisualElementDragControls(node);\n    }\n    mount() {\n        // If we've been provided a DragControls for manual control over the drag gesture,\n        // subscribe this component to it on mount.\n        const { dragControls } = this.node.getProps();\n        if (dragControls) {\n            this.removeGroupControls = dragControls.subscribe(this.controls);\n        }\n        this.removeListeners = this.controls.addListeners() || noop;\n    }\n    unmount() {\n        this.removeGroupControls();\n        this.removeListeners();\n    }\n}\n\nexport { DragGesture };\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { color } from '../../../value/types/color/index.mjs';\nimport { complex } from '../../../value/types/complex/index.mjs';\nimport { dimensionValueTypes } from './dimensions.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n","import { createBox } from '../projection/geometry/models.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { isWillChangeMotionValue } from '../value/use-will-change/is.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { transformProps } from './html/utils/transform.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from './utils/is-variant-label.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { variantProps } from './utils/variant-props.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { KeyframeResolver } from './utils/KeyframesResolver.mjs';\nimport { isNumericalString } from '../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../utils/is-zero-value-string.mjs';\nimport { findValueType } from './dom/value-types/find.mjs';\nimport { complex } from '../value/types/complex/index.mjs';\nimport { getAnimatableNone } from './dom/value-types/animatable-none.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst propEventHandlers = [\n    \"AnimationStart\",\n    \"AnimationComplete\",\n    \"Update\",\n    \"BeforeLayoutMeasure\",\n    \"LayoutMeasure\",\n    \"LayoutAnimationStart\",\n    \"LayoutAnimationComplete\",\n];\nconst numVariantProps = variantProps.length;\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n    /**\n     * This method takes React props and returns found MotionValues. For example, HTML\n     * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n     *\n     * This isn't an abstract method as it needs calling in the constructor, but it is\n     * intended to be one.\n     */\n    scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n        return {};\n    }\n    constructor({ parent, props, presenceContext, reducedMotionConfig, blockInitialAnimation, visualState, }, options = {}) {\n        this.resolveKeyframes = (keyframes, \n        // We use an onComplete callback here rather than a Promise as a Promise\n        // resolution is a microtask and we want to retain the ability to force\n        // the resolution of keyframes synchronously.\n        onComplete, name, value) => {\n            return new this.KeyframeResolver(keyframes, onComplete, name, value, this);\n        };\n        /**\n         * A reference to the current underlying Instance, e.g. a HTMLElement\n         * or Three.Mesh etc.\n         */\n        this.current = null;\n        /**\n         * A set containing references to this VisualElement's children.\n         */\n        this.children = new Set();\n        /**\n         * Determine what role this visual element should take in the variant tree.\n         */\n        this.isVariantNode = false;\n        this.isControllingVariants = false;\n        /**\n         * Decides whether this VisualElement should animate in reduced motion\n         * mode.\n         *\n         * TODO: This is currently set on every individual VisualElement but feels\n         * like it could be set globally.\n         */\n        this.shouldReduceMotion = null;\n        /**\n         * A map of all motion values attached to this visual element. Motion\n         * values are source of truth for any given animated value. A motion\n         * value might be provided externally by the component via props.\n         */\n        this.values = new Map();\n        this.KeyframeResolver = KeyframeResolver;\n        /**\n         * Cleanup functions for active features (hover/tap/exit etc)\n         */\n        this.features = {};\n        /**\n         * A map of every subscription that binds the provided or generated\n         * motion values onChange listeners to this visual element.\n         */\n        this.valueSubscriptions = new Map();\n        /**\n         * A reference to the previously-provided motion values as returned\n         * from scrapeMotionValuesFromProps. We use the keys in here to determine\n         * if any motion values need to be removed after props are updated.\n         */\n        this.prevMotionValues = {};\n        /**\n         * An object containing a SubscriptionManager for each active event.\n         */\n        this.events = {};\n        /**\n         * An object containing an unsubscribe function for each prop event subscription.\n         * For example, every \"Update\" event can have multiple subscribers via\n         * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n         */\n        this.propEventSubscriptions = {};\n        this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n        this.render = () => {\n            if (!this.current)\n                return;\n            this.triggerBuild();\n            this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n        };\n        this.scheduleRender = () => frame.render(this.render, false, true);\n        const { latestValues, renderState } = visualState;\n        this.latestValues = latestValues;\n        this.baseTarget = { ...latestValues };\n        this.initialValues = props.initial ? { ...latestValues } : {};\n        this.renderState = renderState;\n        this.parent = parent;\n        this.props = props;\n        this.presenceContext = presenceContext;\n        this.depth = parent ? parent.depth + 1 : 0;\n        this.reducedMotionConfig = reducedMotionConfig;\n        this.options = options;\n        this.blockInitialAnimation = Boolean(blockInitialAnimation);\n        this.isControllingVariants = isControllingVariants(props);\n        this.isVariantNode = isVariantNode(props);\n        if (this.isVariantNode) {\n            this.variantChildren = new Set();\n        }\n        this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n        /**\n         * Any motion values that are provided to the element when created\n         * aren't yet bound to the element, as this would technically be impure.\n         * However, we iterate through the motion values and set them to the\n         * initial values for this component.\n         *\n         * TODO: This is impure and we should look at changing this to run on mount.\n         * Doing so will break some tests but this isn't neccessarily a breaking change,\n         * more a reflection of the test.\n         */\n        const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n        for (const key in initialMotionValues) {\n            const value = initialMotionValues[key];\n            if (latestValues[key] !== undefined && isMotionValue(value)) {\n                value.set(latestValues[key], false);\n                if (isWillChangeMotionValue(willChange)) {\n                    willChange.add(key);\n                }\n            }\n        }\n    }\n    mount(instance) {\n        this.current = instance;\n        visualElementStore.set(instance, this);\n        if (this.projection && !this.projection.instance) {\n            this.projection.mount(instance);\n        }\n        if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n            this.removeFromVariantTree = this.parent.addVariantChild(this);\n        }\n        this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n        if (!hasReducedMotionListener.current) {\n            initPrefersReducedMotion();\n        }\n        this.shouldReduceMotion =\n            this.reducedMotionConfig === \"never\"\n                ? false\n                : this.reducedMotionConfig === \"always\"\n                    ? true\n                    : prefersReducedMotion.current;\n        if (process.env.NODE_ENV !== \"production\") {\n            warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\");\n        }\n        if (this.parent)\n            this.parent.children.add(this);\n        this.update(this.props, this.presenceContext);\n    }\n    unmount() {\n        visualElementStore.delete(this.current);\n        this.projection && this.projection.unmount();\n        cancelFrame(this.notifyUpdate);\n        cancelFrame(this.render);\n        this.valueSubscriptions.forEach((remove) => remove());\n        this.removeFromVariantTree && this.removeFromVariantTree();\n        this.parent && this.parent.children.delete(this);\n        for (const key in this.events) {\n            this.events[key].clear();\n        }\n        for (const key in this.features) {\n            const feature = this.features[key];\n            if (feature) {\n                feature.unmount();\n                feature.isMounted = false;\n            }\n        }\n        this.current = null;\n    }\n    bindToMotionValue(key, value) {\n        const valueIsTransform = transformProps.has(key);\n        const removeOnChange = value.on(\"change\", (latestValue) => {\n            this.latestValues[key] = latestValue;\n            this.props.onUpdate && frame.preRender(this.notifyUpdate);\n            if (valueIsTransform && this.projection) {\n                this.projection.isTransformDirty = true;\n            }\n        });\n        const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n        this.valueSubscriptions.set(key, () => {\n            removeOnChange();\n            removeOnRenderRequest();\n            if (value.owner)\n                value.stop();\n        });\n    }\n    sortNodePosition(other) {\n        /**\n         * If these nodes aren't even of the same type we can't compare their depth.\n         */\n        if (!this.current ||\n            !this.sortInstanceNodePosition ||\n            this.type !== other.type) {\n            return 0;\n        }\n        return this.sortInstanceNodePosition(this.current, other.current);\n    }\n    updateFeatures() {\n        let key = \"animation\";\n        for (key in featureDefinitions) {\n            const featureDefinition = featureDefinitions[key];\n            if (!featureDefinition)\n                continue;\n            const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n            /**\n             * If this feature is enabled but not active, make a new instance.\n             */\n            if (!this.features[key] &&\n                FeatureConstructor &&\n                isEnabled(this.props)) {\n                this.features[key] = new FeatureConstructor(this);\n            }\n            /**\n             * If we have a feature, mount or update it.\n             */\n            if (this.features[key]) {\n                const feature = this.features[key];\n                if (feature.isMounted) {\n                    feature.update();\n                }\n                else {\n                    feature.mount();\n                    feature.isMounted = true;\n                }\n            }\n        }\n    }\n    triggerBuild() {\n        this.build(this.renderState, this.latestValues, this.options, this.props);\n    }\n    /**\n     * Measure the current viewport box with or without transforms.\n     * Only measures axis-aligned boxes, rotate and skew must be manually\n     * removed with a re-render to work.\n     */\n    measureViewportBox() {\n        return this.current\n            ? this.measureInstanceViewportBox(this.current, this.props)\n            : createBox();\n    }\n    getStaticValue(key) {\n        return this.latestValues[key];\n    }\n    setStaticValue(key, value) {\n        this.latestValues[key] = value;\n    }\n    /**\n     * Update the provided props. Ensure any newly-added motion values are\n     * added to our map, old ones removed, and listeners updated.\n     */\n    update(props, presenceContext) {\n        if (props.transformTemplate || this.props.transformTemplate) {\n            this.scheduleRender();\n        }\n        this.prevProps = this.props;\n        this.props = props;\n        this.prevPresenceContext = this.presenceContext;\n        this.presenceContext = presenceContext;\n        /**\n         * Update prop event handlers ie onAnimationStart, onAnimationComplete\n         */\n        for (let i = 0; i < propEventHandlers.length; i++) {\n            const key = propEventHandlers[i];\n            if (this.propEventSubscriptions[key]) {\n                this.propEventSubscriptions[key]();\n                delete this.propEventSubscriptions[key];\n            }\n            const listenerName = (\"on\" + key);\n            const listener = props[listenerName];\n            if (listener) {\n                this.propEventSubscriptions[key] = this.on(key, listener);\n            }\n        }\n        this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps, this), this.prevMotionValues);\n        if (this.handleChildMotionValue) {\n            this.handleChildMotionValue();\n        }\n    }\n    getProps() {\n        return this.props;\n    }\n    /**\n     * Returns the variant definition with a given name.\n     */\n    getVariant(name) {\n        return this.props.variants ? this.props.variants[name] : undefined;\n    }\n    /**\n     * Returns the defined default transition on this component.\n     */\n    getDefaultTransition() {\n        return this.props.transition;\n    }\n    getTransformPagePoint() {\n        return this.props.transformPagePoint;\n    }\n    getClosestVariantNode() {\n        return this.isVariantNode\n            ? this\n            : this.parent\n                ? this.parent.getClosestVariantNode()\n                : undefined;\n    }\n    getVariantContext(startAtParent = false) {\n        if (startAtParent) {\n            return this.parent ? this.parent.getVariantContext() : undefined;\n        }\n        if (!this.isControllingVariants) {\n            const context = this.parent\n                ? this.parent.getVariantContext() || {}\n                : {};\n            if (this.props.initial !== undefined) {\n                context.initial = this.props.initial;\n            }\n            return context;\n        }\n        const context = {};\n        for (let i = 0; i < numVariantProps; i++) {\n            const name = variantProps[i];\n            const prop = this.props[name];\n            if (isVariantLabel(prop) || prop === false) {\n                context[name] = prop;\n            }\n        }\n        return context;\n    }\n    /**\n     * Add a child visual element to our set of children.\n     */\n    addVariantChild(child) {\n        const closestVariantNode = this.getClosestVariantNode();\n        if (closestVariantNode) {\n            closestVariantNode.variantChildren &&\n                closestVariantNode.variantChildren.add(child);\n            return () => closestVariantNode.variantChildren.delete(child);\n        }\n    }\n    /**\n     * Add a motion value and bind it to this visual element.\n     */\n    addValue(key, value) {\n        // Remove existing value if it exists\n        const existingValue = this.values.get(key);\n        if (value !== existingValue) {\n            if (existingValue)\n                this.removeValue(key);\n            this.bindToMotionValue(key, value);\n            this.values.set(key, value);\n            this.latestValues[key] = value.get();\n        }\n    }\n    /**\n     * Remove a motion value and unbind any active subscriptions.\n     */\n    removeValue(key) {\n        this.values.delete(key);\n        const unsubscribe = this.valueSubscriptions.get(key);\n        if (unsubscribe) {\n            unsubscribe();\n            this.valueSubscriptions.delete(key);\n        }\n        delete this.latestValues[key];\n        this.removeValueFromRenderState(key, this.renderState);\n    }\n    /**\n     * Check whether we have a motion value for this key\n     */\n    hasValue(key) {\n        return this.values.has(key);\n    }\n    getValue(key, defaultValue) {\n        if (this.props.values && this.props.values[key]) {\n            return this.props.values[key];\n        }\n        let value = this.values.get(key);\n        if (value === undefined && defaultValue !== undefined) {\n            value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n            this.addValue(key, value);\n        }\n        return value;\n    }\n    /**\n     * If we're trying to animate to a previously unencountered value,\n     * we need to check for it in our state and as a last resort read it\n     * directly from the instance (which might have performance implications).\n     */\n    readValue(key, target) {\n        var _a;\n        let value = this.latestValues[key] !== undefined || !this.current\n            ? this.latestValues[key]\n            : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\n        if (value !== undefined && value !== null) {\n            if (typeof value === \"string\" &&\n                (isNumericalString(value) || isZeroValueString(value))) {\n                // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n                value = parseFloat(value);\n            }\n            else if (!findValueType(value) && complex.test(target)) {\n                value = getAnimatableNone(key, target);\n            }\n            this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n        }\n        return isMotionValue(value) ? value.get() : value;\n    }\n    /**\n     * Set the base target to later animate back to. This is currently\n     * only hydrated on creation and when we first read a value.\n     */\n    setBaseTarget(key, value) {\n        this.baseTarget[key] = value;\n    }\n    /**\n     * Find the base target for a value thats been removed from all animation\n     * props.\n     */\n    getBaseTarget(key) {\n        var _a;\n        const { initial } = this.props;\n        let valueFromInitial;\n        if (typeof initial === \"string\" || typeof initial === \"object\") {\n            const variant = resolveVariantFromProps(this.props, initial, (_a = this.presenceContext) === null || _a === void 0 ? void 0 : _a.custom);\n            if (variant) {\n                valueFromInitial = variant[key];\n            }\n        }\n        /**\n         * If this value still exists in the current initial variant, read that.\n         */\n        if (initial && valueFromInitial !== undefined) {\n            return valueFromInitial;\n        }\n        /**\n         * Alternatively, if this VisualElement config has defined a getBaseTarget\n         * so we can read the value from an alternative source, try that.\n         */\n        const target = this.getBaseTargetFromProps(this.props, key);\n        if (target !== undefined && !isMotionValue(target))\n            return target;\n        /**\n         * If the value was initially defined on initial, but it doesn't any more,\n         * return undefined. Otherwise return the value as initially read from the DOM.\n         */\n        return this.initialValues[key] !== undefined &&\n            valueFromInitial === undefined\n            ? undefined\n            : this.baseTarget[key];\n    }\n    on(eventName, callback) {\n        if (!this.events[eventName]) {\n            this.events[eventName] = new SubscriptionManager();\n        }\n        return this.events[eventName].add(callback);\n    }\n    notify(eventName, ...args) {\n        if (this.events[eventName]) {\n            this.events[eventName].notify(...args);\n        }\n    }\n}\n\nexport { VisualElement };\n","import { isBrowser } from '../is-browser.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nfunction initPrefersReducedMotion() {\n    hasReducedMotionListener.current = true;\n    if (!isBrowser)\n        return;\n    if (window.matchMedia) {\n        const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n        const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n        motionMediaQuery.addListener(setReducedMotionPreferences);\n        setReducedMotionPreferences();\n    }\n    else {\n        prefersReducedMotion.current = false;\n    }\n}\n\nexport { initPrefersReducedMotion };\n","import { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { warnOnce } from '../../utils/warn-once.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n    const { willChange } = next;\n    for (const key in next) {\n        const nextValue = next[key];\n        const prevValue = prev[key];\n        if (isMotionValue(nextValue)) {\n            /**\n             * If this is a motion value found in props or style, we want to add it\n             * to our visual element's motion value map.\n             */\n            element.addValue(key, nextValue);\n            if (isWillChangeMotionValue(willChange)) {\n                willChange.add(key);\n            }\n            /**\n             * Check the version of the incoming motion value with this version\n             * and warn against mismatches.\n             */\n            if (process.env.NODE_ENV === \"development\") {\n                warnOnce(nextValue.version === \"11.2.11\", `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.11 may not work as expected.`);\n            }\n        }\n        else if (isMotionValue(prevValue)) {\n            /**\n             * If we're swapping from a motion value to a static value,\n             * create a new motion value from that\n             */\n            element.addValue(key, motionValue(nextValue, { owner: element }));\n            if (isWillChangeMotionValue(willChange)) {\n                willChange.remove(key);\n            }\n        }\n        else if (prevValue !== nextValue) {\n            /**\n             * If this is a flat value that has changed, update the motion value\n             * or create one if it doesn't exist. We only want to do this if we're\n             * not handling the value with our animation state.\n             */\n            if (element.hasValue(key)) {\n                const existingValue = element.getValue(key);\n                if (existingValue.liveStyle === true) {\n                    existingValue.jump(nextValue);\n                }\n                else if (!existingValue.hasAnimated) {\n                    existingValue.set(nextValue);\n                }\n            }\n            else {\n                const latestValue = element.getStaticValue(key);\n                element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n            }\n        }\n    }\n    // Handle removed values\n    for (const key in prev) {\n        if (next[key] === undefined)\n            element.removeValue(key);\n    }\n    return next;\n}\n\nexport { updateMotionValuesFromProps };\n","import { VisualElement } from '../VisualElement.mjs';\nimport { DOMKeyframesResolver } from './DOMKeyframesResolver.mjs';\n\nclass DOMVisualElement extends VisualElement {\n    constructor() {\n        super(...arguments);\n        this.KeyframeResolver = DOMKeyframesResolver;\n    }\n    sortInstanceNodePosition(a, b) {\n        /**\n         * compareDocumentPosition returns a bitmask, by using the bitwise &\n         * we're returning true if 2 in that bitmask is set to true. 2 is set\n         * to true if b preceeds a.\n         */\n        return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props.style\n            ? props.style[key]\n            : undefined;\n    }\n    removeValueFromRenderState(key, { vars, style }) {\n        delete vars[key];\n        delete style[key];\n    }\n}\n\nexport { DOMVisualElement };\n","import { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './utils/transform.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction getComputedStyle(element) {\n    return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"html\";\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            const defaultType = getDefaultValueType(key);\n            return defaultType ? defaultType.default || 0 : 0;\n        }\n        else {\n            const computedStyle = getComputedStyle(instance);\n            const value = (isCSSVariableName(key)\n                ? computedStyle.getPropertyValue(key)\n                : computedStyle[key]) || 0;\n            return typeof value === \"string\" ? value.trim() : value;\n        }\n    }\n    measureInstanceViewportBox(instance, { transformPagePoint }) {\n        return measureViewportBox(instance, transformPagePoint);\n    }\n    build(renderState, latestValues, options, props) {\n        buildHTMLStyles(renderState, latestValues, options, props.transformTemplate);\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n    handleChildMotionValue() {\n        if (this.childSubscription) {\n            this.childSubscription();\n            delete this.childSubscription;\n        }\n        const { children } = this.props;\n        if (isMotionValue(children)) {\n            this.childSubscription = children.on(\"change\", (latest) => {\n                if (this.current)\n                    this.current.textContent = `${latest}`;\n            });\n        }\n    }\n    renderInstance(instance, renderState, styleProp, projection) {\n        renderHTML(instance, renderState, styleProp, projection);\n    }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { transformProps } from '../html/utils/transform.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n    constructor() {\n        super(...arguments);\n        this.type = \"svg\";\n        this.isSVGTag = false;\n    }\n    getBaseTargetFromProps(props, key) {\n        return props[key];\n    }\n    readValueFromInstance(instance, key) {\n        if (transformProps.has(key)) {\n            const defaultType = getDefaultValueType(key);\n            return defaultType ? defaultType.default || 0 : 0;\n        }\n        key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n        return instance.getAttribute(key);\n    }\n    measureInstanceViewportBox() {\n        return createBox();\n    }\n    scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n        return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n    }\n    build(renderState, latestValues, options, props) {\n        buildSVGAttrs(renderState, latestValues, options, this.isSVGTag, props.transformTemplate);\n    }\n    renderInstance(instance, renderState, styleProp, projection) {\n        renderSVG(instance, renderState, styleProp, projection);\n    }\n    mount(instance) {\n        this.isSVGTag = isSVGTag(instance.tagName);\n        super.mount(instance);\n    }\n}\n\nexport { SVGVisualElement };\n","import { Fragment } from 'react';\nimport { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n    return isSVGComponent(Component)\n        ? new SVGVisualElement(options, { enableHardwareAcceleration: false })\n        : new HTMLVisualElement(options, {\n            allowProjection: Component !== Fragment,\n            enableHardwareAcceleration: true,\n        });\n};\n\nexport { createDomVisualElement };\n","import { createMotionComponent } from '../../motion/index.mjs';\nimport { createMotionProxy } from './motion-proxy.mjs';\nimport { createDomMotionConfig } from './utils/create-config.mjs';\nimport { gestureAnimations } from '../../motion/features/gestures.mjs';\nimport { animations } from '../../motion/features/animations.mjs';\nimport { drag } from '../../motion/features/drag.mjs';\nimport { createDomVisualElement } from './create-visual-element.mjs';\nimport { layout } from '../../motion/features/layout.mjs';\n\nconst preloadedFeatures = {\n    ...animations,\n    ...gestureAnimations,\n    ...drag,\n    ...layout,\n};\n/**\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\n *\n * @public\n */\nconst motion = /*@__PURE__*/ createMotionProxy((Component, config) => createDomMotionConfig(Component, config, preloadedFeatures, createDomVisualElement));\n/**\n * Create a DOM `motion` component with the provided string. This is primarily intended\n * as a full alternative to `motion` for consumers who have to support environments that don't\n * support `Proxy`.\n *\n * ```javascript\n * import { createDomMotionComponent } from \"framer-motion\"\n *\n * const motion = {\n *   div: createDomMotionComponent('div')\n * }\n * ```\n *\n * @public\n */\nfunction createDomMotionComponent(key) {\n    return createMotionComponent(createDomMotionConfig(key, { forwardMotionProps: false }, preloadedFeatures, createDomVisualElement));\n}\n\nexport { createDomMotionComponent, motion };\n","import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n    layout: {\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { layout };\n","import { isSVGComponent } from './is-svg-component.mjs';\nimport { createUseRender } from '../use-render.mjs';\nimport { svgMotionConfig } from '../../svg/config-motion.mjs';\nimport { htmlMotionConfig } from '../../html/config-motion.mjs';\n\nfunction createDomMotionConfig(Component, { forwardMotionProps = false }, preloadedFeatures, createVisualElement) {\n    const baseConfig = isSVGComponent(Component)\n        ? svgMotionConfig\n        : htmlMotionConfig;\n    return {\n        ...baseConfig,\n        preloadedFeatures,\n        useRender: createUseRender(forwardMotionProps),\n        createVisualElement,\n        Component,\n    };\n}\n\nexport { createDomMotionConfig };\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { isMouseEvent, isTouchEvent } from './typeGuards';\nvar DEFAULT_POINT = {\n  x: 0,\n  y: 0\n};\nexport default function getXAndYFromEvent(event) {\n  if (!event) return _extends({}, DEFAULT_POINT);\n  if (isTouchEvent(event)) {\n    return event.changedTouches.length > 0 ? {\n      x: event.changedTouches[0].clientX,\n      y: event.changedTouches[0].clientY\n    } : _extends({}, DEFAULT_POINT);\n  }\n  if (isMouseEvent(event)) {\n    return {\n      x: event.clientX,\n      y: event.clientY\n    };\n  }\n\n  // for focus events try to extract the center position of the target element\n  var target = event == null ? void 0 : event.target;\n  var boundingClientRect = target && 'getBoundingClientRect' in target ? target.getBoundingClientRect() : null;\n  if (!boundingClientRect) return _extends({}, DEFAULT_POINT);\n  return {\n    x: boundingClientRect.x + boundingClientRect.width / 2,\n    y: boundingClientRect.y + boundingClientRect.height / 2\n  };\n}","import { Point } from '@visx/point';\nimport { isSVGElement, isSVGGraphicsElement, isSVGSVGElement } from './typeGuards';\nimport getXAndYFromEvent from './getXAndYFromEvent';\nexport default function localPoint(node, event) {\n  if (!node || !event) return null;\n  var coords = getXAndYFromEvent(event);\n\n  // find top-most SVG\n  var svg = isSVGElement(node) ? node.ownerSVGElement : node;\n  var screenCTM = isSVGGraphicsElement(svg) ? svg.getScreenCTM() : null;\n  if (isSVGSVGElement(svg) && screenCTM) {\n    var point = svg.createSVGPoint();\n    point.x = coords.x;\n    point.y = coords.y;\n    point = point.matrixTransform(screenCTM.inverse());\n    return new Point({\n      x: point.x,\n      y: point.y\n    });\n  }\n\n  // fall back to bounding box\n  var rect = node.getBoundingClientRect();\n  return new Point({\n    x: coords.x - rect.left - node.clientLeft,\n    y: coords.y - rect.top - node.clientTop\n  });\n}","export function isElement(elem) {\n  return !!elem && elem instanceof Element;\n}\n\n// functional definition of isSVGElement. Note that SVGSVGElements are HTMLElements\nexport function isSVGElement(elem) {\n  return !!elem && (elem instanceof SVGElement || 'ownerSVGElement' in elem);\n}\n\n// functional definition of SVGGElement\nexport function isSVGSVGElement(elem) {\n  return !!elem && 'createSVGPoint' in elem;\n}\nexport function isSVGGraphicsElement(elem) {\n  return !!elem && 'getScreenCTM' in elem;\n}\n\n// functional definition of TouchEvent\nexport function isTouchEvent(event) {\n  return !!event && 'changedTouches' in event;\n}\n\n// functional definition of MouseEvent\nexport function isMouseEvent(event) {\n  return !!event && 'clientX' in event;\n}\n\n// functional definition of event\nexport function isEvent(event) {\n  return !!event && (event instanceof Event || 'nativeEvent' in event && event.nativeEvent instanceof Event);\n}","import localPointGeneric from './localPointGeneric';\nimport { isElement, isEvent } from './typeGuards';\n\n/** Handles two signatures for backwards compatibility. */\nexport default function localPoint(nodeOrEvent, maybeEvent) {\n  // localPoint(node, event)\n  if (isElement(nodeOrEvent) && maybeEvent) {\n    return localPointGeneric(nodeOrEvent, maybeEvent);\n  }\n  // localPoint(event)\n  if (isEvent(nodeOrEvent)) {\n    var event = nodeOrEvent;\n    var node = event.target;\n    if (node) return localPointGeneric(node, event);\n  }\n  return null;\n}","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(8);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n    finlen = sum(finlen, fin, alen, a, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n    if (xtail === 0) {\n        if (ytail === 0) {\n            a[0] = 0;\n            b[0] = 0;\n            return 1;\n        } else {\n            negate = -ytail;\n            s1 = negate * ax;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        }\n    } else {\n        if (ytail === 0) {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            a[1] = s1;\n            negate = -xtail;\n            s1 = negate * by;\n            c = splitter * negate;\n            ahi = c - (c - negate);\n            alo = negate - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            b[1] = s1;\n            return 2;\n        } else {\n            s1 = xtail * ay;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * ay;\n            bhi = c - (c - ay);\n            blo = ay - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = ytail * ax;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * ax;\n            bhi = c - (c - ax);\n            blo = ax - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            a[3] = u3;\n            s1 = ytail * bx;\n            c = splitter * ytail;\n            ahi = c - (c - ytail);\n            alo = ytail - ahi;\n            c = splitter * bx;\n            bhi = c - (c - bx);\n            blo = bx - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = xtail * by;\n            c = splitter * xtail;\n            ahi = c - (c - xtail);\n            alo = xtail - ahi;\n            c = splitter * by;\n            bhi = c - (c - by);\n            blo = by - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            b[3] = u3;\n            return 4;\n        }\n    }\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n    s1 = a * b;\n    c = splitter * a;\n    ahi = c - (c - a);\n    alo = a - ahi;\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    c = splitter * k;\n    bhi = c - (c - k);\n    blo = k - bhi;\n    _i = s0 * k;\n    c = splitter * s0;\n    ahi = c - (c - s0);\n    alo = s0 - ahi;\n    u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n    _j = s1 * k;\n    c = splitter * s1;\n    ahi = c - (c - s1);\n    alo = s1 - ahi;\n    _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n    _k = _i + _0;\n    bvirt = _k - _i;\n    u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n    u3 = _j + _k;\n    u[2] = _k - (u3 - _j);\n    u[3] = u3;\n    finlen = finadd(finlen, 4, u);\n    if (z !== 0) {\n        c = splitter * z;\n        bhi = c - (c - z);\n        blo = z - bhi;\n        _i = s0 * z;\n        c = splitter * s0;\n        ahi = c - (c - s0);\n        alo = s0 - ahi;\n        u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n        _j = s1 * z;\n        c = splitter * s1;\n        ahi = c - (c - s1);\n        alo = s1 - ahi;\n        _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n        _k = _i + _0;\n        bvirt = _k - _i;\n        u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n        u3 = _j + _k;\n        u[2] = _k - (u3 - _j);\n        u[3] = u3;\n        finlen = finadd(finlen, 4, u);\n    }\n    return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail;\n    let adytail, bdytail, cdytail;\n    let adztail, bdztail, cdztail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            scale(4, bc, adz, _8), _8,\n            scale(4, ca, bdz, _8b), _8b, _16), _16,\n        scale(4, ab, cdz, _8), _8, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = o3derrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    bvirt = az - adz;\n    adztail = az - (adz + bvirt) + (bvirt - dz);\n    bvirt = bz - bdz;\n    bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n    bvirt = cz - cdz;\n    cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n        adytail === 0 && bdytail === 0 && cdytail === 0 &&\n        adztail === 0 && bdztail === 0 && cdztail === 0) {\n        return det;\n    }\n\n    errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n    det +=\n        adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n        bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n        cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n    const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n    const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n    const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n    finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n    const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n    finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n    const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n    finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n    if (adztail !== 0) {\n        finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n        finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n    }\n    if (bdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n        finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n    }\n    if (cdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n        finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n    }\n\n    if (adxtail !== 0) {\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n        }\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n        }\n    }\n    if (bdxtail !== 0) {\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n        }\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n        }\n    }\n    if (cdxtail !== 0) {\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n        }\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n\n    const det =\n        adz * (bdxcdy - cdxbdy) +\n        bdz * (cdxady - adxcdy) +\n        cdz * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n    const errbound = o3derrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n\n    return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    return adx * (bdy * cdz - bdz * cdy) +\n        bdx * (cdy * adz - cdz * ady) +\n        cdx * (ady * bdz - adz * bdy);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n    finlen = sum(finlen, fin, a, alen, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n    let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n    let abtlen, bctlen, catlen;\n    let abttlen, bcttlen, cattlen;\n    let n1, n0;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            sum(\n                scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n                scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n            sum(\n                scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n                scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n        sum(\n            scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n            scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = iccerrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n        return det;\n    }\n\n    errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n    det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n        2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n        ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n        2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n        ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n        2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n        s1 = adx * adx;\n        c = splitter * adx;\n        ahi = c - (c - adx);\n        alo = adx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = ady * ady;\n        c = splitter * ady;\n        ahi = c - (c - ady);\n        alo = ady - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        aa[3] = u3;\n    }\n    if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n        s1 = bdx * bdx;\n        c = splitter * bdx;\n        ahi = c - (c - bdx);\n        alo = bdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = bdy * bdy;\n        c = splitter * bdy;\n        ahi = c - (c - bdy);\n        alo = bdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        bb[3] = u3;\n    }\n    if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n        s1 = cdx * cdx;\n        c = splitter * cdx;\n        ahi = c - (c - cdx);\n        alo = cdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = cdy * cdy;\n        c = splitter * cdy;\n        ahi = c - (c - cdy);\n        alo = cdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        cc[3] = u3;\n    }\n\n    if (adxtail !== 0) {\n        axtbclen = scale(4, bc, adxtail, axtbc);\n        finlen = finadd(finlen, sum_three(\n            scale(axtbclen, axtbc, 2 * adx, _16), _16,\n            scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n            scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n    }\n    if (adytail !== 0) {\n        aytbclen = scale(4, bc, adytail, aytbc);\n        finlen = finadd(finlen, sum_three(\n            scale(aytbclen, aytbc, 2 * ady, _16), _16,\n            scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n            scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n    }\n    if (bdxtail !== 0) {\n        bxtcalen = scale(4, ca, bdxtail, bxtca);\n        finlen = finadd(finlen, sum_three(\n            scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n            scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n            scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n    }\n    if (bdytail !== 0) {\n        bytcalen = scale(4, ca, bdytail, bytca);\n        finlen = finadd(finlen, sum_three(\n            scale(bytcalen, bytca, 2 * bdy, _16), _16,\n            scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n            scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n    }\n    if (cdxtail !== 0) {\n        cxtablen = scale(4, ab, cdxtail, cxtab);\n        finlen = finadd(finlen, sum_three(\n            scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n            scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n            scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n    }\n    if (cdytail !== 0) {\n        cytablen = scale(4, ab, cdytail, cytab);\n        finlen = finadd(finlen, sum_three(\n            scale(cytablen, cytab, 2 * cdy, _16), _16,\n            scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n            scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n    }\n\n    if (adxtail !== 0 || adytail !== 0) {\n        if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n            s1 = bdxtail * cdy;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdy;\n            bhi = c - (c - cdy);\n            blo = cdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * cdytail;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            s1 = cdxtail * -bdy;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * -bdy;\n            bhi = c - (c - -bdy);\n            blo = -bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * -bdytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * -bdytail;\n            bhi = c - (c - -bdytail);\n            blo = -bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            bctlen = sum(4, u, 4, v, bct);\n            s1 = bdxtail * cdytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdxtail * bdytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            bctt[3] = u3;\n            bcttlen = 4;\n        } else {\n            bct[0] = 0;\n            bctlen = 1;\n            bctt[0] = 0;\n            bcttlen = 1;\n        }\n        if (adxtail !== 0) {\n            const len = scale(bctlen, bct, adxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(axtbclen, axtbc, adxtail, _16), _16,\n                scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * adx, _16), _16,\n                scale(len2, _8, adxtail, _16b), _16b,\n                scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n            }\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n            }\n        }\n        if (adytail !== 0) {\n            const len = scale(bctlen, bct, adytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(aytbclen, aytbc, adytail, _16), _16,\n                scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * ady, _16), _16,\n                scale(len2, _8, adytail, _16b), _16b,\n                scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n        }\n    }\n    if (bdxtail !== 0 || bdytail !== 0) {\n        if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n            s1 = cdxtail * ady;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * ady;\n            bhi = c - (c - ady);\n            blo = ady - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * adytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -cdy;\n            n0 = -cdytail;\n            s1 = adxtail * n1;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * n0;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            catlen = sum(4, u, 4, v, cat);\n            s1 = cdxtail * adytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adxtail * cdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            catt[3] = u3;\n            cattlen = 4;\n        } else {\n            cat[0] = 0;\n            catlen = 1;\n            catt[0] = 0;\n            cattlen = 1;\n        }\n        if (bdxtail !== 0) {\n            const len = scale(catlen, cat, bdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bxtcalen, bxtca, bdxtail, _16), _16,\n                scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdx, _16), _16,\n                scale(len2, _8, bdxtail, _16b), _16b,\n                scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n            }\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n            }\n        }\n        if (bdytail !== 0) {\n            const len = scale(catlen, cat, bdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bytcalen, bytca, bdytail, _16), _16,\n                scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdy, _16), _16,\n                scale(len2, _8, bdytail, _16b), _16b,\n                scale(len, _16c, bdytail, _32), _32,  _32b, _64), _64);\n        }\n    }\n    if (cdxtail !== 0 || cdytail !== 0) {\n        if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n            s1 = adxtail * bdy;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdy;\n            bhi = c - (c - bdy);\n            blo = bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * bdytail;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -ady;\n            n0 = -adytail;\n            s1 = bdxtail * n1;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * n0;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            abtlen = sum(4, u, 4, v, abt);\n            s1 = adxtail * bdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdxtail * adytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            abtt[3] = u3;\n            abttlen = 4;\n        } else {\n            abt[0] = 0;\n            abtlen = 1;\n            abtt[0] = 0;\n            abttlen = 1;\n        }\n        if (cdxtail !== 0) {\n            const len = scale(abtlen, abt, cdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cxtablen, cxtab, cdxtail, _16), _16,\n                scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdx, _16), _16,\n                scale(len2, _8, cdxtail, _16b), _16b,\n                scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n            }\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n            }\n        }\n        if (cdytail !== 0) {\n            const len = scale(abtlen, abt, cdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cytablen, cytab, cdytail, _16), _16,\n                scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdy, _16), _16,\n                scale(len2, _8, cdytail, _16b), _16b,\n                scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n    const alift = adx * adx + ady * ady;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n    const blift = bdx * bdx + bdy * bdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n    const clift = cdx * cdx + cdy * cdy;\n\n    const det =\n        alift * (bdxcdy - cdxbdy) +\n        blift * (cdxady - adxcdy) +\n        clift * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n    const errbound = iccerrboundA * permanent;\n\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const ady = ay - dy;\n    const bdx = bx - dx;\n    const bdy = by - dy;\n    const cdx = cx - dx;\n    const cdy = cy - dy;\n\n    const abdet = adx * bdy - bdx * ady;\n    const bcdet = bdx * cdy - cdx * bdy;\n    const cadet = cdx * ady - adx * cdy;\n    const alift = adx * adx + ady * ady;\n    const blift = bdx * bdx + bdy * bdy;\n    const clift = cdx * cdx + cdy * cdy;\n\n    return alift * bcdet + blift * cadet + clift * abdet;\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n    return sum_three(\n        scale(4, a, az, _8), _8,\n        scale(4, b, bz, _8b), _8b,\n        scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n    const len = sum(\n        sum(alen, a, blen, b, _48), _48,\n        negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n    return sum_three(\n        scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n        scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n        scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    s1 = ax * by;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ay;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n    s1 = bx * cy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * by;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cx * dy;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * cy;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    cd[3] = u3;\n    s1 = dx * ey;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * dy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    de[3] = u3;\n    s1 = ex * ay;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * ey;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ea[3] = u3;\n    s1 = ax * cy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * ay;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ac[3] = u3;\n    s1 = bx * dy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * by;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bd[3] = u3;\n    s1 = cx * ey;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * cy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ce[3] = u3;\n    s1 = dx * ay;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * dy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    da[3] = u3;\n    s1 = ex * by;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ey;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    eb[3] = u3;\n\n    const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n    const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n    const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n    const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n    const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n    const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n    const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n    const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n    const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n    const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n    const deterlen = sum_three(\n        liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n        liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n        sum_three(\n            liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n            liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n            liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n    return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n    const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n    return sum_three(\n        scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n        scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n        scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n    let ab3, bc3, cd3, da3, ac3, bd3;\n\n    let aextail, bextail, cextail, dextail;\n    let aeytail, beytail, ceytail, deytail;\n    let aeztail, beztail, ceztail, deztail;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    s1 = aex * bey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bex * aey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ab3 = _j + _i;\n    bvirt = ab3 - _j;\n    ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n    ab[3] = ab3;\n    s1 = bex * cey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * bey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bc3 = _j + _i;\n    bvirt = bc3 - _j;\n    bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n    bc[3] = bc3;\n    s1 = cex * dey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * cey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    cd3 = _j + _i;\n    bvirt = cd3 - _j;\n    cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n    cd[3] = cd3;\n    s1 = dex * aey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = aex * dey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    da3 = _j + _i;\n    bvirt = da3 - _j;\n    da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n    da[3] = da3;\n    s1 = aex * cey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * aey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ac3 = _j + _i;\n    bvirt = ac3 - _j;\n    ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n    ac[3] = ac3;\n    s1 = bex * dey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * bey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bd3 = _j + _i;\n    bvirt = bd3 - _j;\n    bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n    bd[3] = bd3;\n\n    const finlen = sum(\n        sum(\n            negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n            liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n        sum(\n            negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n            liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = isperrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - aex;\n    aextail = ax - (aex + bvirt) + (bvirt - ex);\n    bvirt = ay - aey;\n    aeytail = ay - (aey + bvirt) + (bvirt - ey);\n    bvirt = az - aez;\n    aeztail = az - (aez + bvirt) + (bvirt - ez);\n    bvirt = bx - bex;\n    bextail = bx - (bex + bvirt) + (bvirt - ex);\n    bvirt = by - bey;\n    beytail = by - (bey + bvirt) + (bvirt - ey);\n    bvirt = bz - bez;\n    beztail = bz - (bez + bvirt) + (bvirt - ez);\n    bvirt = cx - cex;\n    cextail = cx - (cex + bvirt) + (bvirt - ex);\n    bvirt = cy - cey;\n    ceytail = cy - (cey + bvirt) + (bvirt - ey);\n    bvirt = cz - cez;\n    ceztail = cz - (cez + bvirt) + (bvirt - ez);\n    bvirt = dx - dex;\n    dextail = dx - (dex + bvirt) + (bvirt - ex);\n    bvirt = dy - dey;\n    deytail = dy - (dey + bvirt) + (bvirt - ey);\n    bvirt = dz - dez;\n    deztail = dz - (dez + bvirt) + (bvirt - ez);\n    if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n        bextail === 0 && beytail === 0 && beztail === 0 &&\n        cextail === 0 && ceytail === 0 && ceztail === 0 &&\n        dextail === 0 && deytail === 0 && deztail === 0) {\n        return det;\n    }\n\n    errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n    const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n    const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n    const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n    const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n    const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n    const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n    det +=\n        (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n        (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n        ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n        ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n        (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n        ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n        2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n        (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n        ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n        (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const aexbey = aex * bey;\n    const bexaey = bex * aey;\n    const ab = aexbey - bexaey;\n    const bexcey = bex * cey;\n    const cexbey = cex * bey;\n    const bc = bexcey - cexbey;\n    const cexdey = cex * dey;\n    const dexcey = dex * cey;\n    const cd = cexdey - dexcey;\n    const dexaey = dex * aey;\n    const aexdey = aex * dey;\n    const da = dexaey - aexdey;\n    const aexcey = aex * cey;\n    const cexaey = cex * aey;\n    const ac = aexcey - cexaey;\n    const bexdey = bex * dey;\n    const dexbey = dex * bey;\n    const bd = bexdey - dexbey;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    const det =\n        (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n        (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n    const aezplus = Math.abs(aez);\n    const bezplus = Math.abs(bez);\n    const cezplus = Math.abs(cez);\n    const dezplus = Math.abs(dez);\n    const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n    const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n    const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n    const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n    const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n    const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n    const permanent =\n        (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n        (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n        (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n        (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n    const errbound = isperrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n    const aex = pax - pex;\n    const bex = pbx - pex;\n    const cex = pcx - pex;\n    const dex = pdx - pex;\n    const aey = pay - pey;\n    const bey = pby - pey;\n    const cey = pcy - pey;\n    const dey = pdy - pey;\n    const aez = paz - pez;\n    const bez = pbz - pez;\n    const cez = pcz - pez;\n    const dez = pdz - pez;\n\n    const ab = aex * bey - bex * aey;\n    const bc = bex * cey - cex * bey;\n    const cd = cex * dey - dex * cey;\n    const da = dex * aey - aex * dey;\n    const ac = aex * cey - cex * aey;\n    const bd = bex * dey - dex * bey;\n\n    const abc = aez * bc - bez * ac + cez * ab;\n    const bcd = bez * cd - cez * bd + dez * bc;\n    const cda = cez * da + dez * ac + aez * cd;\n    const dab = dez * ab + aez * bd + bez * da;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\nexport default class Delaunator {\n\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        this._triangles = new Uint32Array(maxTriangles * 3);\n        this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        this._hashSize = Math.ceil(Math.sqrt(n));\n        this._hullPrev = new Uint32Array(n); // edge to prev edge\n        this._hullNext = new Uint32Array(n); // edge to next edge\n        this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n        // temporary arrays for sorting points\n        this._ids = new Uint32Array(n);\n        this._dists = new Float64Array(n);\n\n        this.update();\n    }\n\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let i0, i1, i2;\n\n        // pick a seed point close to the center\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        // find the point closest to the seed\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                const d = this._dists[id];\n                if (d > d0) {\n                    hull[j++] = id;\n                    d0 = d;\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Uint32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp, yp; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the halfedge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    // add a new triangle given vertex indices and adjacent half-edge ids\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n    return p[0];\n}\nfunction defaultGetY(p) {\n    return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(x, y, w, h) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n  }\n  value() {\n    return this._ || null;\n  }\n}\n","export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (Math.abs(ab) < 1e-9) {\n        // degenerate case (collinear diagram)\n        // almost equal points (degenerate triangle)\n        // the circumcenter is at the infinity, in a\n        // direction that is:\n        // 1. orthogonal to the halfedge.\n        let a = 1e9;\n        // 2. points away from the center; since the list of triangles starts\n        // in the center, the first point of the first triangle\n        // will be our reference\n        const r = triangles[0] * 2;\n        a *= Math.sign((points[r] - x1) * ey - (points[r + 1] - y1) * ex);\n        x = (x1 + x3) / 2 - a * ey;\n        y = (y1 + y3) / 2 + a * ex;\n      } else {\n        const d = 1 / ab;\n        const bl = dx * dx + dy * dy;\n        const cl = ex * ex + ey * ey;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] == cj[aj]\n          && ci[ai + 1] == cj[aj + 1]\n          && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n          && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n          ) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points);\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1 = 0;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    while (true) {\n      if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n      // undefined, the conditional statement will be executed.\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    if (P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k]\n        || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n          P.splice(j, 2), i -= 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) {\n        inedges[hull[1]] = 0;\n        this.triangles[1] = hull[1];\n        this.triangles[2] = hull[1];\n      }\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r) {\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n    r = r == undefined ? 2 : +r;\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n","import data from \"@/data/data_slope\";\nimport { Group } from \"@visx/group\";\nimport { scalePoint, scaleLinear } from \"@visx/scale\";\nimport useMeasure from \"react-use-measure\";\nimport { group, range, ascending } from \"@visx/vendor/d3-array\";\nimport { AxisBottom, AxisLeft } from \"@visx/axis\";\nimport { GridColumns } from \"@visx/grid\";\nimport { LinePath } from \"@visx/shape\";\nimport { abToState } from \"@/data/states\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useMemo, useState } from \"react\";\nimport { localPoint } from \"@visx/event\";\nimport { voronoi } from \"@visx/delaunay\";\n\nconst margin = { top: 0, bottom: 40, left: 50, right: 50 };\n\nconst xAccessor = (d) => d.year;\nconst yAccessor = (d) => d.proportion;\n\nconst groupedData = group(data, (d) => d.state);\n\nconst xScale = scalePoint({\n  domain: [...new Set(data.map(xAccessor))],\n  // padding: 0.6,\n});\nconst yScale = scaleLinear({\n  // domain: [0, max(data, yAccessor)],\n  domain: [0, 75],\n});\n\nconst textOutlineStyles = {\n  stroke: \"white\",\n  strokeWidth: 6,\n};\n\nconst SlopeChart = ({ state, includeStates, avg }) => {\n  const [containerRef, { width, height }] = useMeasure();\n\n  const [hoveredData, setHoveredData] = useState();\n\n  // bounds\n  const xMax = width - margin.left - margin.right;\n  const yMax = height - margin.top - margin.bottom;\n\n  xScale.range([0, xMax]);\n  yScale.range([yMax, 0]);\n\n  const avgData = useMemo(() => {\n    if (!avg) {\n      return groupedData.get(\"US\");\n    } else if (avg === \"border\") {\n      return groupedData.get(state).map((d) => ({\n        ...d,\n        proportion: d.proportionBorder,\n      }));\n    } else if (avg === \"borderBans\") {\n      return groupedData.get(\"border_statesborderingtotalbans\").map((d) => ({\n        ...d,\n        proportion: d.proportion * 100,\n      }));\n    }\n  }, [avg, state]);\n\n  const filteredData = useMemo(() => {\n    return data.filter(\n      (d) =>\n        includeStates.includes(d.state) && d.state !== \"US\" && d.proportion,\n    );\n  }, [includeStates]);\n\n  // Compute voronoi\n  const voronoiDiagram = useMemo(() => {\n    return voronoi({\n      data: filteredData,\n      x: (d) => xScale(xAccessor(d)),\n      y: (d) => yScale(yAccessor(d)),\n      width,\n      height,\n    });\n  }, [filteredData, height, width]);\n\n  // const polygons = useMemo(() => {\n  //   return Array.from(voronoiDiagram.cellPolygons());\n  // }, [voronoiDiagram]);\n\n  const selectedData = groupedData.get(state);\n\n  // Dodge labels\n  const dodgedLabelPositions = useMemo(() => {\n    return range(avgData.length).map((i) => {\n      const positions = [avgData, selectedData].map((d) => {\n        return yScale(d[i].proportion);\n      });\n\n      // If any positions are missing\n      if (!positions.every(isFinite)) {\n        return {\n          avg: positions[0],\n          selected: positions[1],\n        };\n      }\n\n      const dodgedPositions = dodge(positions, 15);\n\n      return {\n        avg: dodgedPositions[0],\n        selected: dodgedPositions[1],\n      };\n    });\n  }, [avgData, selectedData]);\n\n  return (\n    <div ref={containerRef} className=\"relative h-full w-full\">\n      {width > 10 && (\n        <svg\n          width={width}\n          height={height}\n          className=\"overflow-visible\"\n          onMouseMove={(e) => {\n            const { x, y } = localPoint(e);\n\n            const closest = voronoiDiagram.delaunay.find(x, y);\n            const closestState = filteredData[closest].state;\n\n            setHoveredData(groupedData.get(closestState));\n          }}\n          onMouseLeave={(e) => {\n            setHoveredData(null);\n          }}\n        >\n          <Group left={margin.left} top={margin.top}>\n            {/* Slopes */}\n            {/* {[...groupedData].map(([state, d]) => { */}\n            {includeStates.map((state, i) => {\n              const d = groupedData.get(state);\n\n              return (\n                <LinePath\n                  key={`line-${state}`}\n                  data={d}\n                  x={(d) => xScale(xAccessor(d))}\n                  y={(d) => yScale(yAccessor(d))}\n                  className=\"stroke-gray-90\"\n                  strokeOpacity={0.5}\n                  strokeWidth={2}\n                  fill=\"none\"\n                />\n              );\n            })}\n            {/* Grid and axes */}\n            <GridColumns\n              scale={xScale}\n              width={xMax}\n              height={yMax}\n              className=\"text-gray-10\"\n              stroke=\"currentColor\"\n            />\n            <AxisBottom\n              top={yMax}\n              scale={xScale}\n              hideAxisLine\n              hideTicks\n              tickLabelProps={{\n                fontFamily: \"var(--font-gotham)\",\n                fill: \"var(--color-gray-40)\",\n              }}\n            />\n            <AxisLeft\n              scale={yScale}\n              tickValues={[0, 75]}\n              hideTicks\n              tickLabelProps={{\n                fontFamily: \"var(--font-gotham)\",\n                fill: \"var(--color-gray-40)\",\n              }}\n              tickFormat={tickYFormat}\n            />\n\n            {/* Highlighted slopes */}\n\n            {/* selected state */}\n            <AnimatePresence>\n              {state !== \"US\" &&\n                !isNaN(groupedData.get(state)[0].proportion) && (\n                  // {state !== \"US\" && (\n                  <motion.g\n                    key={`slope-${state}`}\n                    initial={{ opacity: 0 }}\n                    animate={{ opacity: hoveredData ? 0.3 : 1 }}\n                    exit={{ opacity: 0 }}\n                  >\n                    <LinePath\n                      data={groupedData.get(state)}\n                      x={(d) => xScale(xAccessor(d))}\n                      y={(d) => yScale(yAccessor(d))}\n                      className=\"stroke-orange-00\"\n                      strokeWidth={2}\n                      fill=\"none\"\n                    />\n                    {groupedData.get(state).map((d, i) => {\n                      const labelY = dodgedLabelPositions[i]?.selected\n                        ? dodgedLabelPositions[i].selected\n                        : yScale(yAccessor(d));\n\n                      return (\n                        <g key={`${state}-${i}`}>\n                          <circle\n                            key={`circle-${state}-${i}`}\n                            cx={xScale(xAccessor(d))}\n                            cy={yScale(yAccessor(d))}\n                            className=\"fill-orange-00\"\n                            r={5}\n                          />\n                          {/* text outline */}\n                          <text\n                            y={labelY}\n                            x={xScale(xAccessor(d))}\n                            textAnchor={i === 0 ? \"end\" : \"start\"}\n                            dominantBaseline=\"middle\"\n                            fontWeight=\"500\"\n                            className=\"fill-orange-00 text-xs font-medium\"\n                            dx={i === 0 ? -10 : 10}\n                            {...textOutlineStyles}\n                          >\n                            {yFormat(yAccessor(d))}\n                          </text>\n                          <text\n                            y={labelY}\n                            x={xScale(xAccessor(d))}\n                            textAnchor={i === 0 ? \"end\" : \"start\"}\n                            dominantBaseline=\"middle\"\n                            fontWeight=\"500\"\n                            className=\"fill-orange-00 text-xs font-medium\"\n                            dx={i === 0 ? -10 : 10}\n                          >\n                            {yFormat(yAccessor(d))}\n                          </text>\n                          {i === 0 && (\n                            <>\n                              {/* text outline */}\n                              <text\n                                y={labelY}\n                                x={xScale(xAccessor(d))}\n                                textAnchor={i === 0 ? \"end\" : \"start\"}\n                                dominantBaseline=\"middle\"\n                                className=\"text-xs\"\n                                dx={i === 0 ? -10 : 10}\n                                dy={\n                                  labelY < dodgedLabelPositions[i].avg\n                                    ? -15\n                                    : 15\n                                }\n                                {...textOutlineStyles}\n                              >\n                                {abToState[state]}\n                              </text>\n                              <text\n                                y={labelY}\n                                x={xScale(xAccessor(d))}\n                                textAnchor={i === 0 ? \"end\" : \"start\"}\n                                dominantBaseline=\"middle\"\n                                className=\"text-xs\"\n                                dx={i === 0 ? -10 : 10}\n                                dy={\n                                  labelY < dodgedLabelPositions[i].avg\n                                    ? -15\n                                    : 15\n                                }\n                              >\n                                {abToState[state]}\n                              </text>\n                            </>\n                          )}\n                        </g>\n                      );\n                    })}\n                  </motion.g>\n                )}\n            </AnimatePresence>\n\n            {/* average */}\n            {!isNaN(avgData[0].proportion) && (\n              <motion.g\n                  animate={{\n                    opacity: hoveredData ? 0.3 : 1,\n                  }}\n                >\n                <LinePath\n                  data={avgData}\n                  x={(d) => xScale(xAccessor(d))}\n                  y={(d) => yScale(yAccessor(d))}\n                  className=\"stroke-new-navy\"\n                  strokeWidth={2}\n                />\n                {avgData.map((d, i) => {\n                  const labelY = dodgedLabelPositions[i]?.avg\n                    ? dodgedLabelPositions[i].avg\n                    : yScale(yAccessor(d));\n\n                  return (\n                    <g key={`group-US-${i}`}>\n                      <circle\n                        key={`circle-US-${i}`}\n                        cx={xScale(xAccessor(d))}\n                        cy={yScale(yAccessor(d))}\n                        className=\"fill-new-navy\"\n                        r={5}\n                      />\n                      {/* text outline */}\n                      <text\n                        y={labelY}\n                        x={xScale(xAccessor(d))}\n                        textAnchor={i === 0 ? \"end\" : \"start\"}\n                        dominantBaseline=\"middle\"\n                        fontWeight=\"500\"\n                        className=\"fill-new-navy text-xs font-medium\"\n                        {...textOutlineStyles}\n                        dx={i === 0 ? -10 : 10}\n                      >\n                        {yFormat(yAccessor(d))}\n                      </text>\n                      <text\n                        y={labelY}\n                        x={xScale(xAccessor(d))}\n                        textAnchor={i === 0 ? \"end\" : \"start\"}\n                        dominantBaseline=\"middle\"\n                        fontWeight=\"500\"\n                        className=\"fill-new-navy text-xs font-medium\"\n                        dx={i === 0 ? -10 : 10}\n                      >\n                        {yFormat(yAccessor(d))}\n                      </text>\n                      {i === 1 && (\n                        <>\n                          {/* text outline */}\n                          <motion.text\n                            textAnchor={i === 0 ? \"end\" : \"start\"}\n                            dominantBaseline=\"middle\"\n                            className=\"text-xs CHECK\"\n                            {...textOutlineStyles}\n                            style={{\n                              translateX:\n                                xScale(xAccessor(d)) + (i === 0 ? -10 : 10),\n                              translateY:\n                                labelY > dodgedLabelPositions[i].selected\n                                  ? labelY + 15\n                                  : `calc(-100% + ${labelY}px)`,\n                              transformBox: \"fill-box\",\n                            }}\n                          >\n                            <>Average</>\n                          </motion.text>\n                          <motion.text\n                            textAnchor={i === 0 ? \"end\" : \"start\"}\n                            dominantBaseline=\"middle\"\n                            className=\"text-xs\"\n                            style={{\n                              translateX:\n                                xScale(xAccessor(d)) + (i === 0 ? -10 : 10),\n                              translateY:\n                                labelY > dodgedLabelPositions[i].selected\n                                  ? labelY + 15\n                                  : `calc(-100% + ${labelY}px)`,\n                              transformBox: \"fill-box\",\n                            }}\n                          >\n                            <>Average</>\n                            {/* {avg === \"borderBans\" && (\n                              <>\n                                <tspan x={0}>Total ban</tspan>\n                                <tspan x={0} y={12}>\n                                  border\n                                </tspan>\n                                <tspan x={0} y={24}>\n                                  states avg.\n                                </tspan>\n                              </>\n                            )}\n                            {avg === \"border\" && (\n                              <>\n                                <tspan x={0}>{abToState[state]}</tspan>\n                                <tspan x={0} y={12}>\n                                  border\n                                </tspan>\n                                <tspan x={0} y={24}>\n                                  states avg.\n                                </tspan>\n                              </>\n                            )} */}\n                          </motion.text>\n                        </>\n                      )}\n                    </g>\n                  );\n                })}\n              </motion.g>\n            )}\n\n            {/* hovered state */}\n            <AnimatePresence>\n              {hoveredData && (\n                // {state !== \"US\" && (\n                <motion.g\n                  key={`hovered-slope-${hoveredData[0].state}`}\n                  initial={{ opacity: 0 }}\n                  animate={{ opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                >\n                  <LinePath\n                    data={hoveredData}\n                    x={(d) => xScale(xAccessor(d))}\n                    y={(d) => yScale(yAccessor(d))}\n                    className=\"stroke-orange-00\"\n                    strokeWidth={2}\n                  />\n                  {hoveredData.map((d, i) => {\n                    const labelY = yScale(yAccessor(d));\n\n                    return (\n                      <g key={`${state}-${i}`}>\n                        <circle\n                          key={`circle-${state}-${i}`}\n                          cx={xScale(xAccessor(d))}\n                          cy={yScale(yAccessor(d))}\n                          className=\"fill-orange-00\"\n                          r={5}\n                        />\n                        {/* text outline */}\n                        <text\n                          y={labelY}\n                          x={xScale(xAccessor(d))}\n                          textAnchor={i === 0 ? \"end\" : \"start\"}\n                          dominantBaseline=\"middle\"\n                          fontWeight=\"500\"\n                          className=\"fill-orange-00 text-xs font-medium\"\n                          dx={i === 0 ? -10 : 10}\n                          {...textOutlineStyles}\n                        >\n                          {yFormat(yAccessor(d))}\n                        </text>\n                        <text\n                          y={labelY}\n                          x={xScale(xAccessor(d))}\n                          textAnchor={i === 0 ? \"end\" : \"start\"}\n                          dominantBaseline=\"middle\"\n                          fontWeight=\"500\"\n                          className=\"fill-orange-00 text-xs font-medium\"\n                          dx={i === 0 ? -10 : 10}\n                        >\n                          {yFormat(yAccessor(d))}\n                        </text>\n                        {i === 0 && (\n                          <>\n                            {/* text outline */}\n                            <text\n                              y={labelY}\n                              x={xScale(xAccessor(d))}\n                              textAnchor={i === 0 ? \"end\" : \"start\"}\n                              dominantBaseline=\"middle\"\n                              className=\"text-xs\"\n                              dx={i === 0 ? -10 : 10}\n                              dy={15}\n                              {...textOutlineStyles}\n                            >\n                              {abToState[d.state]}\n                            </text>\n                            <text\n                              y={labelY}\n                              x={xScale(xAccessor(d))}\n                              textAnchor={i === 0 ? \"end\" : \"start\"}\n                              dominantBaseline=\"middle\"\n                              className=\"text-xs\"\n                              dx={i === 0 ? -10 : 10}\n                              dy={15}\n                            >\n                              {abToState[d.state]}\n                            </text>\n                          </>\n                        )}\n                      </g>\n                    );\n                  })}\n                </motion.g>\n              )}\n            </AnimatePresence>\n          </Group>\n\n          {/* Voronoi */}\n          {/* <g id=\"polygons\">\n            {polygons.map((polygon, i) => {\n              console.log(polygon);\n              return (\n                <Polygon\n                  key={`polygon-${i}`}\n                  polygon={polygon}\n                  stroke=\"pink\"\n                  strokeWidth={1}\n                  fill=\"transparent\"\n                />\n              );\n            })}\n          </g> */}\n        </svg>\n      )}\n    </div>\n  );\n};\n\nfunction yFormat(t) {\n  return Math.round(t) + \"%\";\n}\n\nfunction tickYFormat(t) {\n  return t + \"%\";\n}\n\nfunction dodge(positions, separation = 10, maxiter = 10, maxerror = 1e-1) {\n  positions = Array.from(positions);\n  let n = positions.length;\n  if (!positions.every(isFinite)) throw new Error(\"invalid position\");\n  if (!(n > 1)) return positions;\n  let index = range(positions.length);\n  for (let iter = 0; iter < maxiter; ++iter) {\n    index.sort((i, j) => ascending(positions[i], positions[j]));\n    let error = 0;\n    for (let i = 1; i < n; ++i) {\n      let delta = positions[index[i]] - positions[index[i - 1]];\n      if (delta < separation) {\n        delta = (separation - delta) / 2;\n        error = Math.max(error, delta);\n        positions[index[i - 1]] -= delta;\n        positions[index[i]] += delta;\n      }\n    }\n    if (error < maxerror) break;\n  }\n  return positions;\n}\n\nexport default SlopeChart;\n","import { Delaunay } from '@visx/vendor/d3-delaunay';\nvar CLIP_PADDING = 1;\n/**\n * Returns a configured d3 voronoi diagram for the given data. See d3-delaunay\n * for the complete API reference.\n */\nexport default function voronoi(_ref) {\n  var _ref$data = _ref.data,\n    data = _ref$data === void 0 ? [] : _ref$data,\n    _ref$width = _ref.width,\n    width = _ref$width === void 0 ? 0 : _ref$width,\n    _ref$height = _ref.height,\n    height = _ref$height === void 0 ? 0 : _ref$height,\n    x = _ref.x,\n    y = _ref.y;\n  var delaunay = Delaunay.from(data, x, y);\n  return delaunay.voronoi([-CLIP_PADDING, -CLIP_PADDING, width + CLIP_PADDING, height + CLIP_PADDING]);\n}","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","export default x => x;\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","function _taggedTemplateLiteral(e, t) {\n  return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {\n    raw: {\n      value: Object.freeze(t)\n    }\n  }));\n}\nexport { _taggedTemplateLiteral as default };","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import _pt from \"prop-types\";\nvar _excluded = [\"graticule\", \"lines\", \"outline\", \"extent\", \"extentMajor\", \"extentMinor\", \"step\", \"stepMajor\", \"stepMinor\", \"precision\", \"children\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport { Group } from '@visx/group';\nimport { geoGraticule } from '@visx/vendor/d3-geo';\n// eslint-disable-next-line import/no-unresolved\n\nexport default function Graticule(_ref) {\n  var graticule = _ref.graticule,\n    lines = _ref.lines,\n    outline = _ref.outline,\n    extent = _ref.extent,\n    extentMajor = _ref.extentMajor,\n    extentMinor = _ref.extentMinor,\n    step = _ref.step,\n    stepMajor = _ref.stepMajor,\n    stepMinor = _ref.stepMinor,\n    precision = _ref.precision,\n    children = _ref.children,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var currGraticule = geoGraticule();\n  if (extent) currGraticule.extent(extent);\n  if (extentMajor) currGraticule.extentMajor(extentMajor);\n  if (extentMinor) currGraticule.extentMinor(extentMinor);\n  if (step) currGraticule.step(step);\n  if (stepMajor) currGraticule.stepMajor(stepMajor);\n  if (stepMinor) currGraticule.stepMinor(stepMinor);\n  if (precision) currGraticule.precision(precision);\n  if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n    graticule: currGraticule\n  }));\n  return /*#__PURE__*/React.createElement(Group, {\n    className: \"visx-geo-graticule\"\n  }, graticule && /*#__PURE__*/React.createElement(\"path\", _extends({\n    d: graticule(currGraticule()),\n    fill: \"none\",\n    stroke: \"black\"\n  }, restProps)), lines && currGraticule.lines().map(function (line, i) {\n    return /*#__PURE__*/React.createElement(\"g\", {\n      key: i\n    }, /*#__PURE__*/React.createElement(\"path\", _extends({\n      d: lines(line),\n      fill: \"none\",\n      stroke: \"black\"\n    }, restProps)));\n  }), outline && /*#__PURE__*/React.createElement(\"path\", _extends({\n    d: outline(currGraticule.outline()),\n    fill: \"none\",\n    stroke: \"black\"\n  }, restProps)));\n}\nGraticule.propTypes = {\n  graticule: _pt.func,\n  lines: _pt.func,\n  outline: _pt.func,\n  children: _pt.func,\n  precision: _pt.number\n};","import _pt from \"prop-types\";\nvar _excluded = [\"data\", \"projection\", \"projectionFunc\", \"clipAngle\", \"clipExtent\", \"scale\", \"translate\", \"center\", \"rotate\", \"precision\", \"fitExtent\", \"fitSize\", \"centroid\", \"graticule\", \"graticuleLines\", \"graticuleOutline\", \"className\", \"innerRef\", \"digits\", \"pointRadius\", \"children\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport { Group } from '@visx/group';\nimport { geoOrthographic, geoAlbers, geoAlbersUsa, geoMercator, geoNaturalEarth1, geoEqualEarth, geoPath } from '@visx/vendor/d3-geo';\n// this is just for types\n// eslint-disable-next-line import/no-unresolved\n\nimport Graticule from '../graticule/Graticule';\nvar projectionMapping = {\n  orthographic: function orthographic() {\n    return geoOrthographic();\n  },\n  albers: function albers() {\n    return geoAlbers();\n  },\n  albersUsa: function albersUsa() {\n    return geoAlbersUsa();\n  },\n  mercator: function mercator() {\n    return geoMercator();\n  },\n  naturalEarth: function naturalEarth() {\n    return geoNaturalEarth1();\n  },\n  equalEarth: function equalEarth() {\n    return geoEqualEarth();\n  }\n};\n/**\n * Component for all projections.\n */\nexport default function Projection(_ref) {\n  var data = _ref.data,\n    _ref$projection = _ref.projection,\n    projection = _ref$projection === void 0 ? 'mercator' : _ref$projection,\n    projectionFunc = _ref.projectionFunc,\n    clipAngle = _ref.clipAngle,\n    clipExtent = _ref.clipExtent,\n    scale = _ref.scale,\n    translate = _ref.translate,\n    center = _ref.center,\n    rotate = _ref.rotate,\n    precision = _ref.precision,\n    fitExtent = _ref.fitExtent,\n    fitSize = _ref.fitSize,\n    centroid = _ref.centroid,\n    graticule = _ref.graticule,\n    graticuleLines = _ref.graticuleLines,\n    graticuleOutline = _ref.graticuleOutline,\n    className = _ref.className,\n    innerRef = _ref.innerRef,\n    digits = _ref.digits,\n    pointRadius = _ref.pointRadius,\n    children = _ref.children,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var maybeCustomProjection = typeof projection === 'string' ? projectionMapping[projection] : projection;\n  var currProjection = maybeCustomProjection();\n  if (clipAngle && currProjection.clipAngle) currProjection.clipAngle(clipAngle);\n  if (clipExtent && currProjection.clipExtent) currProjection.clipExtent(clipExtent);\n  if (scale && currProjection.scale) currProjection.scale(scale);\n  if (translate && currProjection.translate) currProjection.translate(translate);\n  if (center && currProjection.center) currProjection.center(center);\n  if (rotate && currProjection.rotate) currProjection.rotate(rotate);\n  if (precision && currProjection.precision) currProjection.precision(precision);\n  if (fitExtent && currProjection.fitExtent) currProjection.fitExtent.apply(currProjection, fitExtent);\n  if (fitSize && currProjection.fitSize) currProjection.fitSize.apply(currProjection, fitSize);\n  var path = geoPath().projection(currProjection);\n  if (digits !== undefined) path.digits(digits);\n  if (pointRadius !== undefined) path.pointRadius(pointRadius);\n  var features = data.map(function (feature, i) {\n    return {\n      feature: feature,\n      type: projection,\n      projection: currProjection,\n      index: i,\n      centroid: path.centroid(feature),\n      path: path(feature)\n    };\n  });\n  if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n    path: path,\n    features: features,\n    projection: currProjection\n  }));\n  return /*#__PURE__*/React.createElement(Group, {\n    className: \"visx-geo\"\n  }, graticule && !graticule.foreground && /*#__PURE__*/React.createElement(Graticule, _extends({\n    graticule: function graticule(ml) {\n      return path(ml) || '';\n    }\n  }, graticule)), graticuleLines && !graticuleLines.foreground && /*#__PURE__*/React.createElement(Graticule, _extends({\n    lines: function lines(l) {\n      return path(l) || '';\n    }\n  }, graticuleLines)), graticuleOutline && !graticuleOutline.foreground && /*#__PURE__*/React.createElement(Graticule, _extends({\n    outline: function outline(p) {\n      return path(p) || '';\n    }\n  }, graticuleOutline)), features.map(function (feature, i) {\n    return /*#__PURE__*/React.createElement(\"g\", {\n      key: projection + \"-\" + i\n    }, /*#__PURE__*/React.createElement(\"path\", _extends({\n      className: cx(\"visx-geo-\" + projection, className),\n      d: feature.path || '',\n      ref: innerRef == null ? void 0 : innerRef(feature, i)\n    }, restProps)), centroid == null ? void 0 : centroid(feature.centroid, feature));\n  }), projectionFunc == null ? void 0 : projectionFunc(currProjection), (graticule == null ? void 0 : graticule.foreground) && /*#__PURE__*/React.createElement(Graticule, _extends({\n    graticule: function graticule(ml) {\n      return path(ml) || '';\n    }\n  }, graticule)), (graticuleLines == null ? void 0 : graticuleLines.foreground) && /*#__PURE__*/React.createElement(Graticule, _extends({\n    lines: function lines(l) {\n      return path(l) || '';\n    }\n  }, graticuleLines)), (graticuleOutline == null ? void 0 : graticuleOutline.foreground) && /*#__PURE__*/React.createElement(Graticule, _extends({\n    outline: function outline(p) {\n      return path(p) || '';\n    }\n  }, graticuleOutline)));\n}\nProjection.propTypes = {\n  data: _pt.array.isRequired,\n  projectionFunc: _pt.func,\n  clipAngle: _pt.number,\n  scale: _pt.number,\n  precision: _pt.number,\n  centroid: _pt.func,\n  className: _pt.string,\n  children: _pt.func,\n  innerRef: _pt.func,\n  digits: _pt.number,\n  pointRadius: _pt.number\n};","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(v * cz);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, z);\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = hypot(x, y, z);\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from 'react';\nimport Projection from './Projection';\n/**\n * All props pass through to `<Projection projection=\"albersUsa\" {...props} />`\n */\nexport default function AlbersUsa(props) {\n  return /*#__PURE__*/React.createElement(Projection, _extends({\n    projection: \"albersUsa\"\n  }, props));\n}","export default function(x) {\n  return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","function random() {\n  return \"\".concat(Math.random().toString(36), \"00000000000000000\").replace(/[^a-z]+/g, '').slice(0, 5);\n}\n\nfunction circles() {\n  var size = 20;\n  var background = '';\n  var radius = 2;\n  var complement = false;\n  var fill = '#343434';\n  var stroke = '#343434';\n  var strokeWidth = 0;\n  var id = random();\n\n  var $ = function $(selection) {\n    var group = selection.append('defs').append('pattern').attr('id', id).attr('patternUnits', 'userSpaceOnUse').attr('width', size).attr('height', size);\n\n    if (background) {\n      group.append('rect').attr('width', size).attr('height', size).attr('fill', background);\n    }\n\n    group.append('circle').attr('cx', size / 2).attr('cy', size / 2).attr('r', radius).attr('fill', fill).attr('stroke', stroke).attr('stroke-width', strokeWidth);\n\n    if (complement) {\n      for (var _i = 0, _arr = [[0, 0], [0, size], [size, 0], [size, size]]; _i < _arr.length; _i++) {\n        var corner = _arr[_i];\n        group.append('circle').attr('cx', corner[0]).attr('cy', corner[1]).attr('r', radius).attr('fill', fill).attr('stroke', stroke).attr('stroke-width', strokeWidth);\n      }\n    }\n  };\n\n  $.heavier = function (_) {\n    radius *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.lighter = function (_) {\n    radius /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thinner = function (_) {\n    size *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thicker = function (_) {\n    size /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.background = function (_) {\n    background = _;\n    return $;\n  };\n\n  $.size = function (_) {\n    size = _;\n    return $;\n  };\n\n  $.complement = function (_) {\n    complement = arguments.length === 0 ? true : _;\n    return $;\n  };\n\n  $.radius = function (_) {\n    radius = _;\n    return $;\n  };\n\n  $.fill = function (_) {\n    fill = _;\n    return $;\n  };\n\n  $.stroke = function (_) {\n    stroke = _;\n    return $;\n  };\n\n  $.strokeWidth = function (_) {\n    strokeWidth = _;\n    return $;\n  };\n\n  $.id = function (_) {\n    if (arguments.length === 0) {\n      return id;\n    }\n\n    id = _;\n    return $;\n  };\n\n  $.url = function () {\n    return \"url(#\".concat(id, \")\");\n  };\n\n  return $;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n  var it;\n\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n\n      var F = function () {};\n\n      return {\n        s: F,\n        n: function () {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function (e) {\n          throw e;\n        },\n        f: F\n      };\n    }\n\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var normalCompletion = true,\n      didErr = false,\n      err;\n  return {\n    s: function () {\n      it = o[Symbol.iterator]();\n    },\n    n: function () {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function (e) {\n      didErr = true;\n      err = e;\n    },\n    f: function () {\n      try {\n        if (!normalCompletion && it.return != null) it.return();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}\n\nfunction lines() {\n  var size = 20;\n  var stroke = '#343434';\n  var strokeWidth = 2;\n  var background = '';\n  var id = random();\n  var orientation = ['diagonal'];\n  var shapeRendering = 'auto';\n\n  var path = function path(orientation) {\n    var s = size;\n\n    switch (orientation) {\n      case '0/8':\n      case 'vertical':\n        return \"M \".concat(s / 2, \", 0 l 0, \").concat(s);\n\n      case '1/8':\n        return \"M \".concat(-s / 4, \",\").concat(s, \" l \").concat(s / 2, \",\").concat(-s, \" M \").concat(s / 4, \",\").concat(s, \" l \").concat(s / 2, \",\").concat(-s, \" M \").concat(s * 3 / 4, \",\").concat(s, \" l \").concat(s / 2, \",\").concat(-s);\n\n      case '2/8':\n      case 'diagonal':\n        return \"M 0,\".concat(s, \" l \").concat(s, \",\").concat(-s, \" M \").concat(-s / 4, \",\").concat(s / 4, \" l \").concat(s / 2, \",\").concat(-s / 2, \" M \").concat(3 / 4 * s, \",\").concat(5 / 4 * s, \" l \").concat(s / 2, \",\").concat(-s / 2);\n\n      case '3/8':\n        return \"M 0,\".concat(3 / 4 * s, \" l \").concat(s, \",\").concat(-s / 2, \" M 0,\").concat(s / 4, \" l \").concat(s, \",\").concat(-s / 2, \" M 0,\").concat(s * 5 / 4, \" l \").concat(s, \",\").concat(-s / 2);\n\n      case '4/8':\n      case 'horizontal':\n        return \"M 0,\".concat(s / 2, \" l \").concat(s, \",0\");\n\n      case '5/8':\n        return \"M 0,\".concat(-s / 4, \" l \").concat(s, \",\").concat(s / 2, \"M 0,\").concat(s / 4, \" l \").concat(s, \",\").concat(s / 2, \" M 0,\").concat(s * 3 / 4, \" l \").concat(s, \",\").concat(s / 2);\n\n      case '6/8':\n        return \"M 0,0 l \".concat(s, \",\").concat(s, \" M \").concat(-s / 4, \",\").concat(3 / 4 * s, \" l \").concat(s / 2, \",\").concat(s / 2, \" M \").concat(s * 3 / 4, \",\").concat(-s / 4, \" l \").concat(s / 2, \",\").concat(s / 2);\n\n      case '7/8':\n        return \"M \".concat(-s / 4, \",0 l \").concat(s / 2, \",\").concat(s, \" M \").concat(s / 4, \",0 l \").concat(s / 2, \",\").concat(s, \" M \").concat(s * 3 / 4, \",0 l \").concat(s / 2, \",\").concat(s);\n\n      default:\n        return \"M \".concat(s / 2, \", 0 l 0, \").concat(s);\n    }\n  };\n\n  var $ = function $(selection) {\n    var group = selection.append('defs').append('pattern').attr('id', id).attr('patternUnits', 'userSpaceOnUse').attr('width', size).attr('height', size);\n\n    if (background) {\n      group.append('rect').attr('width', size).attr('height', size).attr('fill', background);\n    }\n\n    var _iterator = _createForOfIteratorHelper(orientation),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var o = _step.value;\n        group.append('path').attr('d', path(o)).attr('stroke-width', strokeWidth).attr('shape-rendering', shapeRendering).attr('stroke', stroke).attr('stroke-linecap', 'square');\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n  };\n\n  $.heavier = function (_) {\n    strokeWidth *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.lighter = function (_) {\n    strokeWidth /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thinner = function (_) {\n    size *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thicker = function (_) {\n    size /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.background = function (_) {\n    background = _;\n    return $;\n  };\n\n  $.size = function (_) {\n    size = _;\n    return $;\n  };\n\n  $.orientation = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (arguments.length === 0) {\n      return $;\n    }\n\n    orientation = args;\n    return $;\n  };\n\n  $.shapeRendering = function (_) {\n    shapeRendering = _;\n    return $;\n  };\n\n  $.stroke = function (_) {\n    stroke = _;\n    return $;\n  };\n\n  $.strokeWidth = function (_) {\n    strokeWidth = _;\n    return $;\n  };\n\n  $.id = function (_) {\n    if (arguments.length === 0) {\n      return id;\n    }\n\n    id = _;\n    return $;\n  };\n\n  $.url = function () {\n    return \"url(#\".concat(id, \")\");\n  };\n\n  return $;\n}\n\nfunction paths() {\n  var width = 1;\n  var height = 1;\n  var size = 20;\n  var stroke = '#343434';\n  var strokeWidth = 2;\n  var background = '';\n\n  var d = function d(s) {\n    return \"M \".concat(s / 4, \",\").concat(s * 3 / 4, \"l\").concat(s / 4, \",\").concat(-s / 2, \"l\").concat(s / 4, \",\").concat(s / 2);\n  };\n\n  var id = random();\n  var fill = 'transparent';\n  var shapeRendering = 'auto';\n\n  var path = function path(_) {\n    var s = size;\n\n    switch (_) {\n      case 'squares':\n        return \"M \".concat(s / 4, \" \").concat(s / 4, \" l \").concat(s / 2, \" 0 l 0 \").concat(s / 2, \" l \").concat(-s / 2, \" 0 Z\");\n\n      case 'nylon':\n        return \"M 0 \".concat(s / 4, \" l \").concat(s / 4, \" 0 l 0 \").concat(-s / 4, \" M \").concat(s * 3 / 4, \" \").concat(s, \" l 0 \").concat(-s / 4, \" l \").concat(s / 4, \" 0 M \").concat(s / 4, \" \").concat(s / 2, \" l 0 \").concat(s / 4, \" l \").concat(s / 4, \" 0 M \").concat(s / 2, \" \").concat(s / 4, \" l \").concat(s / 4, \" 0 l 0 \").concat(s / 4);\n\n      case 'waves':\n        return \"M 0 \".concat(s / 2, \" c \").concat(s / 8, \" \").concat(-s / 4, \" , \").concat(s * 3 / 8, \" \").concat(-s / 4, \" , \").concat(s / 2, \" 0 c \").concat(s / 8, \" \").concat(s / 4, \" , \").concat(s * 3 / 8, \" \").concat(s / 4, \" , \").concat(s / 2, \" 0 M \").concat(-s / 2, \" \").concat(s / 2, \" c \").concat(s / 8, \" \").concat(s / 4, \" , \").concat(s * 3 / 8, \" \").concat(s / 4, \" , \").concat(s / 2, \" 0 M \").concat(s, \" \").concat(s / 2, \" c \").concat(s / 8, \" \").concat(-s / 4, \" , \").concat(s * 3 / 8, \" \").concat(-s / 4, \" , \").concat(s / 2, \" 0\");\n\n      case 'woven':\n        return \"M \".concat(s / 4, \",\").concat(s / 4, \"l\").concat(s / 2, \",\").concat(s / 2, \"M\").concat(s * 3 / 4, \",\").concat(s / 4, \"l\").concat(s / 2, \",\").concat(-s / 2, \" M\").concat(s / 4, \",\").concat(s * 3 / 4, \"l\").concat(-s / 2, \",\").concat(s / 2, \"M\").concat(s * 3 / 4, \",\").concat(s * 5 / 4, \"l\").concat(s / 2, \",\").concat(-s / 2, \" M\").concat(-s / 4, \",\").concat(s / 4, \"l\").concat(s / 2, \",\").concat(-s / 2);\n\n      case 'crosses':\n        return \"M \".concat(s / 4, \",\").concat(s / 4, \"l\").concat(s / 2, \",\").concat(s / 2, \"M\").concat(s / 4, \",\").concat(s * 3 / 4, \"l\").concat(s / 2, \",\").concat(-s / 2);\n\n      case 'caps':\n        return \"M \".concat(s / 4, \",\").concat(s * 3 / 4, \"l\").concat(s / 4, \",\").concat(-s / 2, \"l\").concat(s / 4, \",\").concat(s / 2);\n\n      case 'hexagons':\n        width = 3;\n        height = Math.sqrt(3);\n        return \"M \".concat(s, \",0 l \").concat(s, \",0 l \").concat(s / 2, \",\").concat(s * Math.sqrt(3) / 2, \" l \").concat(-s / 2, \",\").concat(s * Math.sqrt(3) / 2, \" l \").concat(-s, \",0 l \").concat(-s / 2, \",\").concat(-s * Math.sqrt(3) / 2, \" Z M 0,\").concat(s * Math.sqrt(3) / 2, \" l \").concat(s / 2, \",0 M \").concat(3 * s, \",\").concat(s * Math.sqrt(3) / 2, \" l \").concat(-s / 2, \",0\");\n\n      default:\n        return _(s);\n    }\n  };\n\n  var $ = function $(selection) {\n    var p = path(d);\n    var group = selection.append('defs').append('pattern').attr('id', id).attr('patternUnits', 'userSpaceOnUse').attr('width', size * width).attr('height', size * height);\n\n    if (background) {\n      group.append('rect').attr('width', size * width).attr('height', size * height).attr('fill', background);\n    }\n\n    group.append('path').attr('d', p).attr('fill', fill).attr('stroke', stroke).attr('stroke-width', strokeWidth).attr('stroke-linecap', 'square').attr('shape-rendering', shapeRendering);\n  };\n\n  $.heavier = function (_) {\n    strokeWidth *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.lighter = function (_) {\n    strokeWidth /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thinner = function (_) {\n    size *= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.thicker = function (_) {\n    size /= arguments.length === 0 ? 2 : 2 * _;\n    return $;\n  };\n\n  $.background = function (_) {\n    background = _;\n    return $;\n  };\n\n  $.shapeRendering = function (_) {\n    shapeRendering = _;\n    return $;\n  };\n\n  $.size = function (_) {\n    size = _;\n    return $;\n  };\n\n  $.d = function (_) {\n    d = _;\n    return $;\n  };\n\n  $.fill = function (_) {\n    fill = _;\n    return $;\n  };\n\n  $.stroke = function (_) {\n    stroke = _;\n    return $;\n  };\n\n  $.strokeWidth = function (_) {\n    strokeWidth = _;\n    return $;\n  };\n\n  $.id = function (_) {\n    if (arguments.length === 0) {\n      return id;\n    }\n\n    id = _;\n    return $;\n  };\n\n  $.url = function () {\n    return \"url(#\".concat(id, \")\");\n  };\n\n  return $;\n}\n\n/* eslint import/no-anonymous-default-export: [2, {\"allowObject\": true}] */\n\nvar main = {\n  circles: circles,\n  lines: lines,\n  paths: paths\n};\n\nexport default main;\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","import _pt from \"prop-types\";\nvar _excluded = [\"id\", \"markerWidth\", \"markerHeight\", \"markerUnits\", \"children\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nexport default function Marker(_ref) {\n  var id = _ref.id,\n    _ref$markerWidth = _ref.markerWidth,\n    markerWidth = _ref$markerWidth === void 0 ? 3 : _ref$markerWidth,\n    _ref$markerHeight = _ref.markerHeight,\n    markerHeight = _ref$markerHeight === void 0 ? 3 : _ref$markerHeight,\n    _ref$markerUnits = _ref.markerUnits,\n    markerUnits = _ref$markerUnits === void 0 ? 'userSpaceOnUse' : _ref$markerUnits,\n    children = _ref.children,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"marker\", _extends({\n    id: id,\n    markerWidth: markerWidth,\n    markerHeight: markerHeight,\n    markerUnits: markerUnits\n  }, restProps), children));\n}\nMarker.propTypes = {\n  id: _pt.string.isRequired,\n  size: _pt.number,\n  markerWidth: _pt.oneOfType([_pt.string, _pt.number]),\n  markerHeight: _pt.oneOfType([_pt.string, _pt.number]),\n  markerUnits: _pt.string,\n  refX: _pt.oneOfType([_pt.string, _pt.number]),\n  refY: _pt.oneOfType([_pt.string, _pt.number]),\n  strokeWidth: _pt.number,\n  children: _pt.node.isRequired\n};","var _excluded = [\"id\", \"size\", \"strokeWidth\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport Marker from './Marker';\nexport default function MarkerArrow(_ref) {\n  var id = _ref.id,\n    _ref$size = _ref.size,\n    size = _ref$size === void 0 ? 9 : _ref$size,\n    _ref$strokeWidth = _ref.strokeWidth,\n    strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var max = size + strokeWidth * 2;\n  var midX = size;\n  var midY = max / 2;\n  var points = \"0 0, \" + size + \" \" + size / 2 + \", 0 \" + size;\n  return /*#__PURE__*/React.createElement(Marker, _extends({\n    id: id,\n    markerWidth: max,\n    markerHeight: max,\n    refX: midX,\n    refY: midY,\n    orient: \"auto\",\n    markerUnits: \"strokeWidth\",\n    fill: \"none\",\n    strokeWidth: strokeWidth\n  }, restProps), /*#__PURE__*/React.createElement(\"g\", {\n    transform: \"translate(\" + strokeWidth + \", \" + strokeWidth + \")\"\n  }, /*#__PURE__*/React.createElement(\"polyline\", {\n    points: points\n  })));\n}","var _excluded = [\"tooltipOpen\"];\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { useState, useCallback } from 'react';\nexport default function useTooltip( /** Optional initial TooltipState. */\ninitialTooltipState) {\n  var _useState = useState(_extends({\n      tooltipOpen: false\n    }, initialTooltipState)),\n    tooltipState = _useState[0],\n    setTooltipState = _useState[1];\n  var showTooltip = useCallback(function (showArgs) {\n    return setTooltipState(typeof showArgs === 'function' ? function (_ref) {\n      var tooltipOpen = _ref.tooltipOpen,\n        show = _objectWithoutPropertiesLoose(_ref, _excluded);\n      return _extends({}, showArgs(show), {\n        tooltipOpen: true\n      });\n    } : {\n      tooltipOpen: true,\n      tooltipLeft: showArgs.tooltipLeft,\n      tooltipTop: showArgs.tooltipTop,\n      tooltipData: showArgs.tooltipData\n    });\n  }, [setTooltipState]);\n  var hideTooltip = useCallback(function () {\n    return setTooltipState({\n      tooltipOpen: false,\n      tooltipLeft: undefined,\n      tooltipTop: undefined,\n      tooltipData: undefined\n    });\n  }, [setTooltipState]);\n  return {\n    tooltipOpen: tooltipState.tooltipOpen,\n    tooltipLeft: tooltipState.tooltipLeft,\n    tooltipTop: tooltipState.tooltipTop,\n    tooltipData: tooltipState.tooltipData,\n    updateTooltip: setTooltipState,\n    showTooltip: showTooltip,\n    hideTooltip: hideTooltip\n  };\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n/* eslint react/no-did-mount-set-state: 0, react/no-find-dom-node: 0 */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nvar emptyRect = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  width: 0,\n  height: 0\n};\nexport default function withBoundingRects(BaseComponent) {\n  var _class;\n  return _class = /*#__PURE__*/function (_React$PureComponent) {\n    _inheritsLoose(WrappedComponent, _React$PureComponent);\n    function WrappedComponent(props) {\n      var _this;\n      _this = _React$PureComponent.call(this, props) || this;\n      _this.state = {\n        rect: undefined,\n        parentRect: undefined\n      };\n      _this.nodeRef = /*#__PURE__*/React.createRef();\n      _this.getRects = _this.getRects.bind(_assertThisInitialized(_this));\n      return _this;\n    }\n    var _proto = WrappedComponent.prototype;\n    _proto.componentDidMount = function componentDidMount() {\n      var _this$nodeRef,\n        _this2 = this;\n      this.node = (_this$nodeRef = this.nodeRef) != null && _this$nodeRef.current ? this.nodeRef.current : ReactDOM.findDOMNode(this);\n      this.setState(function () {\n        return _this2.getRects();\n      });\n    };\n    _proto.getRects = function getRects() {\n      if (!this.node) return this.state;\n      var node = this.node;\n      var parentNode = node.parentNode;\n      var rect = node.getBoundingClientRect ? node.getBoundingClientRect() : emptyRect;\n      var parentRect = parentNode != null && parentNode.getBoundingClientRect ? parentNode.getBoundingClientRect() : emptyRect;\n      return {\n        rect: rect,\n        parentRect: parentRect\n      };\n    };\n    _proto.render = function render() {\n      return /*#__PURE__*/React.createElement(BaseComponent, _extends({\n        nodeRef: this.nodeRef,\n        getRects: this.getRects\n      }, this.state, this.props));\n    };\n    return WrappedComponent;\n  }(React.PureComponent), _class.displayName = \"withBoundingRects(\" + (BaseComponent.displayName || '') + \")\", _class;\n}","import _pt from \"prop-types\";\nvar _excluded = [\"className\", \"top\", \"left\", \"offsetLeft\", \"offsetTop\", \"style\", \"children\", \"unstyled\", \"applyPositionStyle\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nexport var defaultStyles = {\n  position: 'absolute',\n  backgroundColor: 'white',\n  color: '#666666',\n  padding: '.3rem .5rem',\n  borderRadius: '3px',\n  fontSize: '14px',\n  boxShadow: '0 1px 2px rgba(33,33,33,0.2)',\n  lineHeight: '1em',\n  pointerEvents: 'none'\n};\nvar Tooltip = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n  var className = _ref.className,\n    top = _ref.top,\n    left = _ref.left,\n    _ref$offsetLeft = _ref.offsetLeft,\n    offsetLeft = _ref$offsetLeft === void 0 ? 10 : _ref$offsetLeft,\n    _ref$offsetTop = _ref.offsetTop,\n    offsetTop = _ref$offsetTop === void 0 ? 10 : _ref$offsetTop,\n    _ref$style = _ref.style,\n    style = _ref$style === void 0 ? defaultStyles : _ref$style,\n    children = _ref.children,\n    _ref$unstyled = _ref.unstyled,\n    unstyled = _ref$unstyled === void 0 ? false : _ref$unstyled,\n    _ref$applyPositionSty = _ref.applyPositionStyle,\n    applyPositionStyle = _ref$applyPositionSty === void 0 ? false : _ref$applyPositionSty,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    ref: ref,\n    className: cx('visx-tooltip', className),\n    style: _extends({\n      top: top == null || offsetTop == null ? top : top + offsetTop,\n      left: left == null || offsetLeft == null ? left : left + offsetLeft\n    }, applyPositionStyle && {\n      position: 'absolute'\n    }, !unstyled && style)\n  }, restProps), children);\n});\nTooltip.propTypes = {\n  children: _pt.node,\n  className: _pt.string,\n  left: _pt.number,\n  offsetLeft: _pt.number,\n  offsetTop: _pt.number,\n  top: _pt.number,\n  applyPositionStyle: _pt.bool,\n  unstyled: _pt.bool\n};\nTooltip.displayName = 'Tooltip';\nexport default Tooltip;","import { createContext, useContext } from 'react';\nvar TooltipPositionContext = /*#__PURE__*/createContext({\n  isFlippedVertically: false,\n  isFlippedHorizontally: false\n});\nexport var TooltipPositionProvider = TooltipPositionContext.Provider;\nexport var TooltipPositionConsumer = TooltipPositionContext.Consumer;\nexport var useTooltipPosition = function useTooltipPosition() {\n  return useContext(TooltipPositionContext);\n};","import _pt from \"prop-types\";\nvar _excluded = [\"children\", \"getRects\", \"left\", \"offsetLeft\", \"offsetTop\", \"parentRect\", \"rect\", \"style\", \"top\", \"unstyled\", \"nodeRef\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport { withBoundingRects } from '@visx/bounds';\nimport Tooltip, { defaultStyles } from './Tooltip';\nimport { TooltipPositionProvider } from '../context/TooltipPositionContext';\nfunction TooltipWithBounds(_ref) {\n  var children = _ref.children,\n    getRects = _ref.getRects,\n    _ref$left = _ref.left,\n    initialLeft = _ref$left === void 0 ? 0 : _ref$left,\n    _ref$offsetLeft = _ref.offsetLeft,\n    offsetLeft = _ref$offsetLeft === void 0 ? 10 : _ref$offsetLeft,\n    _ref$offsetTop = _ref.offsetTop,\n    offsetTop = _ref$offsetTop === void 0 ? 10 : _ref$offsetTop,\n    parentBounds = _ref.parentRect,\n    ownBounds = _ref.rect,\n    _ref$style = _ref.style,\n    style = _ref$style === void 0 ? defaultStyles : _ref$style,\n    _ref$top = _ref.top,\n    initialTop = _ref$top === void 0 ? 0 : _ref$top,\n    _ref$unstyled = _ref.unstyled,\n    unstyled = _ref$unstyled === void 0 ? false : _ref$unstyled,\n    nodeRef = _ref.nodeRef,\n    otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var transform;\n  var placeTooltipLeft = false;\n  var placeTooltipUp = false;\n  if (ownBounds && parentBounds) {\n    var left = initialLeft;\n    var top = initialTop;\n    if (parentBounds.width) {\n      var rightPlacementClippedPx = left + offsetLeft + ownBounds.width - parentBounds.width;\n      var leftPlacementClippedPx = ownBounds.width - left - offsetLeft;\n      placeTooltipLeft = rightPlacementClippedPx > 0 && rightPlacementClippedPx > leftPlacementClippedPx;\n    } else {\n      var _rightPlacementClippedPx = left + offsetLeft + ownBounds.width - window.innerWidth;\n      var _leftPlacementClippedPx = ownBounds.width - left - offsetLeft;\n      placeTooltipLeft = _rightPlacementClippedPx > 0 && _rightPlacementClippedPx > _leftPlacementClippedPx;\n    }\n    if (parentBounds.height) {\n      var bottomPlacementClippedPx = top + offsetTop + ownBounds.height - parentBounds.height;\n      var topPlacementClippedPx = ownBounds.height - top - offsetTop;\n      placeTooltipUp = bottomPlacementClippedPx > 0 && bottomPlacementClippedPx > topPlacementClippedPx;\n    } else {\n      placeTooltipUp = top + offsetTop + ownBounds.height > window.innerHeight;\n    }\n    left = placeTooltipLeft ? left - ownBounds.width - offsetLeft : left + offsetLeft;\n    top = placeTooltipUp ? top - ownBounds.height - offsetTop : top + offsetTop;\n    left = Math.round(left);\n    top = Math.round(top);\n    transform = \"translate(\" + left + \"px, \" + top + \"px)\";\n  }\n  return /*#__PURE__*/React.createElement(Tooltip, _extends({\n    ref: nodeRef,\n    style: _extends({\n      left: 0,\n      top: 0,\n      transform: transform\n    }, !unstyled && style)\n  }, otherProps), /*#__PURE__*/React.createElement(TooltipPositionProvider, {\n    value: {\n      isFlippedVertically: !placeTooltipUp,\n      isFlippedHorizontally: !placeTooltipLeft\n    }\n  }, children));\n}\nTooltipWithBounds.propTypes = {\n  nodeRef: _pt.oneOfType([_pt.string, _pt.func, _pt.object])\n};\nexport default withBoundingRects(TooltipWithBounds);","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJtMTIgNSA3IDctNyA3IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon('ArrowRight', [\n  ['path', { d: 'M5 12h14', key: '1ays0h' }],\n  ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n]);\n\nexport default ArrowRight;\n","import { cn } from \"@/lib/utils\";\nimport { motion } from \"framer-motion\";\n\nconst InteractionBubble = ({ className = \"\", children }) => {\n  return (\n    <motion.div\n      className={cn(\"\", className)}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      {children}\n    </motion.div>\n  );\n};\n\nexport default InteractionBubble;\n","import useMeasure from \"react-use-measure\";\nimport topology from \"@/data/usa-topo.json\";\nimport { AlbersUsa } from \"@visx/geo\";\nimport { geoCentroid } from \"@visx/vendor/d3-geo\";\nimport * as topojson from \"topojson-client\";\nimport data from \"@/data/data_map.json\";\nimport {\n  stateAbs,\n  stateAbs as states,\n  statesWithTotalBan,\n  stateToId,\n} from \"@/data/states\";\nimport { scaleLinear } from \"@visx/scale\";\nimport { max } from \"@visx/vendor/d3-array\";\nimport { useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport idToState from \"@/data/us-abbr.json\";\nimport textures from \"textures\";\nimport { select } from \"d3-selection\";\nimport { MarkerArrow } from \"@visx/marker\";\nimport { TooltipWithBounds, useTooltip } from \"@visx/tooltip\";\nimport { localPoint } from \"@visx/event\";\nimport { ArrowRight } from \"lucide-react\";\nimport { DataContext } from \"@/src/App\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport MissingData from \"./MissingData\";\n\nconst { features: unitedStates } = topojson.feature(\n  topology,\n  topology.objects.states,\n);\n\nconst idToFeature = new Map(unitedStates.map((d) => [d.id, d]));\n\n// Process dataset to graph representation\nconst graph = {};\n\ngraph.nodes = stateAbs\n  .filter((d) => d !== \"US\")\n  .map((d) => {\n    return {\n      id: d,\n    };\n  });\n\ngraph.links = [];\ndata.forEach((d) => {\n  states.forEach((stateFrom) => {\n    const stateTo = d.state_occurrence;\n\n    const value = parseInt(d[`${stateFrom}_residence`]);\n    if (typeof value === 'number' && !isNaN(value)) {\n      graph.links.push({\n        source: stateFrom,\n        target: stateTo,\n        value,\n      });\n    }\n  });\n});\n\n// Scales\nconst opacityScale = scaleLinear({\n  range: [0.2, 1],\n});\n\nconst FlowMap = ({ state = \"GA\", showOutflow = false }) => {\n  const svgRef = useRef();\n\n  const [containerRef, { width, height }] = useMeasure();\n\n  let widthScale =\n    width > 700\n      ? scaleLinear({\n          // domain: [0, Math.max(...graph.links.map((d) => d.value))],\n          // range: [2, 13],\n          range: [3, 200],\n        })\n      : scaleLinear({\n          // domain: [0, Math.max(...graph.links.map((d) => d.value))],\n          // range: [2, 13],\n          range: [2, 100],\n        });\n\n  const { tooltipLeft, tooltipTop, tooltipData, showTooltip } = useTooltip();\n  const [hideTooltip, setHideTooltip] = useState(true);\n\n  const [showInteractionBubble, setShowEventInteractionBubble] = useState(true);\n  const [hoveredFeature, setHoveredFeature] = useState();\n\n  const { setState } = useContext(DataContext);\n\n  const centerX = width / 2;\n  const centerY = height / 2;\n  const scale = (width + height) / 1.55;\n\n  const [texture, highlightedTexture] = useMemo(() => {\n    const t = textures\n      .lines()\n      .size(3)\n      .strokeWidth(1)\n      .stroke(\"var(--color-gray-70)\");\n\n    const highlightedT = textures\n      .lines()\n      .size(3)\n      .strokeWidth(1)\n      .stroke(\"var(--color-gray-70)\")\n      .background(\"#E0E2FA\");\n\n    return [t, highlightedT];\n  }, []);\n\n  const handleTooltip = useCallback(\n    (event, d) => {\n      if (showInteractionBubble) {\n        setShowEventInteractionBubble(false);\n      }\n\n      const { x, y } = localPoint(event);\n\n      showTooltip({\n        tooltipData: d,\n        tooltipLeft: x,\n        tooltipTop: y,\n      });\n\n      setHideTooltip(false);\n    },\n    [showTooltip],\n  );\n\n  return (\n    <div ref={containerRef} className=\"relative h-full w-full\">\n      {state == \"US\" && <MissingData state={state} placement={\"map\"} />}\n      <AnimatePresence>\n        {showInteractionBubble && (\n          <InteractionBubble className=\"invisible absolute right-[10%] top-0 grid size-12 place-content-center rounded-full p-2 sm:visible\">\n            <PointIcon className=\"size-8\" />\n          </InteractionBubble>\n        )}\n      </AnimatePresence>\n      {width > 10 && (\n        <svg\n          ref={svgRef}\n          width={width}\n          height={height}\n          className=\"overflow-visible\"\n        >\n          <MarkerArrow\n            id={`marker-arrow`}\n            fill=\"#E64E00\"\n            fillOpacity={0.7}\n            size={1.25}\n            refX={1}\n          />\n          <AlbersUsa\n            data={unitedStates}\n            scale={scale}\n            translate={[centerX, centerY - 25]}\n          >\n            {({ features, projection }) => {\n              // Compute centroids\n              graph.nodes.forEach((d) => {\n                const feature = idToFeature.get(stateToId[d.id]);\n                const coords = projection(geoCentroid(feature));\n\n                d.x = coords[0];\n                d.y = coords[1];\n              });\n              const nodesMap = new Map(graph.nodes.map((d) => [d.id, d]));\n\n              if (state === \"US\") return;\n\n              const filteredLinks = graph.links.filter((l) => {\n                // If US selected, show all\n                if (state === \"US\") {\n                  return l.source !== l.target;\n                }\n\n                if (showOutflow) {\n                  return l.source === state && l.target !== state;\n                } else {\n                  return l.target === state && l.source !== state;\n                }\n              });\n\n              widthScale.domain([0, max(graph.links, (d) => d.value)]);\n              opacityScale.domain([0, max(filteredLinks, (d) => d.value)]);\n\n              let highlightStates = new Set();\n              filteredLinks.forEach(({ source, target }) => {\n                if (showOutflow) {\n                  highlightStates.add(target);\n                } else {\n                  highlightStates.add(source);\n                }\n              });\n              highlightStates = [...highlightStates];\n\n              const selectedFeature = features.find(\n                ({ feature }) => idToState[feature.id] === state,\n              );\n\n              select(svgRef.current).call(texture);\n              select(svgRef.current).call(highlightedTexture);\n\n              return (\n                <>\n                  {/* Map */}\n                  {features.map(\n                    ({ feature, path, projection, centroid }, i) => {\n                      const highlight = highlightStates.includes(\n                        idToState[feature.id],\n                      );\n                      const selectedState = idToState[feature.id] === state;\n\n                      const isBanned = statesWithTotalBan.includes(\n                        idToState[feature.id],\n                      );\n\n                      return (\n                        <motion.path\n                          key={`map-feature-${feature.id}`}\n                          className=\"cursor-pointer\"\n                          d={path || \"\"}\n                          stroke={\"white\"}\n                          animate={{\n                            fill:\n                              isBanned && highlight\n                                ? highlightedTexture.url()\n                                : isBanned\n                                  ? texture.url()\n                                  : highlight\n                                    ? \"#E0E2FA\"\n                                    : \"#F1F1F1\",\n                          }}\n                          onClick={() => {\n                            setState(idToState[feature.id]);\n                          }}\n                          onMouseEnter={() => {\n                            if (width > 700) {\n                              if (showInteractionBubble) {\n                                setShowEventInteractionBubble(false);\n                              }\n                              setHoveredFeature({ feature, path, centroid });\n                            }\n                          }}\n                          onMouseLeave={() => {\n                            setHoveredFeature({});\n                          }}\n                        />\n                      );\n                    },\n                  )}\n\n                  {/* Hovered state */}\n                  <AnimatePresence>\n                    {hoveredFeature?.feature && (\n                      <>\n                        <motion.path\n                          key={`hovered-map-feature-${hoveredFeature.feature.id}`}\n                          className=\"pointer-events-none\"\n                          d={hoveredFeature?.path || \"\"}\n                          strokeWidth={2}\n                          fill=\"none\"\n                          initial={{ opacity: 0 }}\n                          animate={{\n                            // stroke: \"#6168E5\",\n                            opacity: 1,\n                          }}\n                          exit={{ opacity: 0 }}\n                          transition={{\n                            duration: 0.2,\n                          }}\n                        />\n                        {/* <motion.text\n                          x={hoveredFeature.centroid[0]}\n                          y={hoveredFeature.centroid[1]}\n                          textAnchor=\"middle\"\n                          dominantBaseline=\"middle\"\n                          className=\"pointer-events-none text-xs font-medium\"\n                          initial={{ opacity: 0 }}\n                          animate={{\n                            opacity: 1,\n                          }}\n                          exit={{ opacity: 0 }}\n                          transition={{\n                            duration: 0.2,\n                          }}\n                        >\n                          {idToState[hoveredFeature.feature.id]}\n                        </motion.text> */}\n                      </>\n                    )}\n                  </AnimatePresence>\n\n                  {/* Selected state */}\n                  <AnimatePresence>\n                    {selectedFeature && (\n                      <motion.path\n                        key={`map-feature-${selectedFeature.feature.id}`}\n                        d={selectedFeature?.path || \"\"}\n                        strokeWidth={2}\n                        initial={{ opacity: 0 }}\n                        animate={{\n                          fill: statesWithTotalBan.includes(\n                            idToState[selectedFeature.feature.id],\n                          )\n                            ? highlightedTexture.url()\n                            : \"#E0E2FA\",\n                          stroke: \"#6168E5\",\n                          opacity: 1,\n                        }}\n                        exit={{ opacity: 0 }}\n                      />\n                    )}\n                  </AnimatePresence>\n\n                  {/* Selected target state */}\n                  <AnimatePresence>\n                    {!hideTooltip && (\n                      <motion.path\n                        // key={`map-feature-${selectedFeature.feature.id}`}\n                        // d={selectedFeature?.path || \"\"}\n                        d={\n                          features.find(({ feature }) => {\n                            return idToState[feature.id] === tooltipData.target;\n                          }).path\n                        }\n                        strokeWidth={2}\n                        initial={{ opacity: 0 }}\n                        animate={{\n                          fill: statesWithTotalBan.includes(\n                            features.find(({feature}) => {\n                              return idToState[feature.id]\n                            }).path\n                            // idToState[selectedFeature.feature.id],\n                          )\n                            ? highlightedTexture.url()\n                            : \"#E0E2FA\",\n                          stroke: \"#6168E5\",\n                          opacity: 1,\n                        }}\n                        exit={{ opacity: 0 }}\n                      />\n                    )}\n                  </AnimatePresence>\n\n                  {/* Straight-line flows */}\n                  <AnimatePresence>\n                    {filteredLinks.map((d) => {\n                      const fromState = nodesMap.get(d.source);\n                      // FIXME:\n                      if (!fromState) return;\n                      const toState = nodesMap.get(d.target);\n\n                      return (\n                        <g key={`line-${d.source}-${d.target}`}>\n                          {/* FIXME: Make it shorter? */}\n                          <motion.line\n                            key={`line-${d.source}-${d.target}`}\n                            x1={fromState.x}\n                            y1={fromState.y}\n                            x2={toState.x}\n                            y2={toState.y + 2}\n                            className=\"stroke-[#E64E00]/70\"\n                            strokeWidth={widthScale(d.value)}\n                            strokeOpacity={\n                              state === \"US\" ? opacityScale(d.value) : null\n                            }\n                            initial={{\n                              // pathLength: 0,\n                              opacity: 0,\n                            }}\n                            animate={{\n                              // pathLength: 1,\n                              opacity:\n                                !hideTooltip && tooltipData === d\n                                  ? 1\n                                  : !hideTooltip\n                                    ? 0.3\n                                    : 1,\n                            }}\n                            exit={{\n                              opacity: 0,\n                            }}\n                            markerEnd={`url(#marker-arrow)`}\n                            // onTouchStart={(event) => handleTooltip(event, d)}\n                            // onTouchMove={(event) => handleTooltip(event, d)}\n                            onMouseMove={(event) => {\n                              handleTooltip(event, d);\n                            }}\n                            onMouseLeave={() => {\n                              setHideTooltip(true);\n                            }}\n                          />\n                        </g>\n                      );\n                    })}\n                  </AnimatePresence>\n\n                  {/* Selected feature label */}\n                  {selectedFeature && (\n                    <>\n                      <AnimatePresence>\n                        {/* {showOutflow && (\n                          <motion.circle\n                            key={`circle-${selectedFeature?.feature?.id}`}\n                            r={12}\n                            fill={\"#E0E2FA\"}\n                            cx={selectedFeature.centroid[0]}\n                            cy={selectedFeature.centroid[1]}\n                            initial={{ opacity: 0 }}\n                            animate={{ opacity: 1 }}\n                            exit={{ opacity: 0 }}\n                          />\n                        )} */}\n                      </AnimatePresence>\n                      <text\n                        x={selectedFeature.centroid[0]}\n                        y={selectedFeature.centroid[1]}\n                        textAnchor=\"middle\"\n                        dominantBaseline=\"middle\"\n                        className=\"text-xs font-medium\"\n                        // fontSize={showOutflow ? 12 : 12}\n                        // fontWeight={showOutflow ? 400 : 600}\n                        stroke={\"#E0E2FA\"}\n                        strokeWidth={7}\n                        fill={\"#E0E2FA\"}\n                        strokeLinejoin={\"round\"}\n                      >\n                        {state}\n                      </text>\n                      <text\n                        x={selectedFeature.centroid[0]}\n                        y={selectedFeature.centroid[1]}\n                        textAnchor=\"middle\"\n                        dominantBaseline=\"middle\"\n                        className=\"text-xs font-medium\"\n                        // fontSize={showOutflow ? 12 : 12}\n                        // fontWeight={showOutflow ? 400 : 600}\n                      >\n                        {state}\n                      </text>\n                    </>\n                  )}\n                </>\n              );\n            }}\n          </AlbersUsa>\n        </svg>\n      )}\n      {/* Tooltip */}\n      <AnimatePresence>\n        {!hideTooltip && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{\n              opacity: 1,\n            }}\n            exit={{ opacity: 0 }}\n          >\n            <TooltipWithBounds\n              left={tooltipLeft}\n              top={tooltipTop}\n              className=\"invisible flex flex-col items-center gap-1 py-3 sm:visible\"\n            >\n              <div className=\"flex items-center gap-1\">\n                <div>{tooltipData.source}</div>\n                <ArrowRight className=\"size-3\" />\n                <div>{tooltipData.target}</div>\n              </div>\n              <div className=\"font-bold text-new-navy\">\n                {formatValue(tooltipData.value)}\n              </div>\n            </TooltipWithBounds>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\nfunction formatValue(value) {\n  return new Intl.NumberFormat(\"en-US\").format(value);\n}\n\nexport default FlowMap;","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nexport { _createClass as default };","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _classCallCheck from '@babel/runtime/helpers/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/createClass';\nimport _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';\n\nvar TOKEN_PLACEHOLDER = 'TOKEN_PLACEHOLDER';\nvar TOKEN_OPEN_TAG = 'TOKEN_OPEN_TAG';\nvar TOKEN_CLOSE_TAG = 'TOKEN_CLOSE_TAG';\nvar TOKEN_SELF_TAG = 'TOKEN_SELF_TAG';\nvar TOKEN_TEXT = 'TOKEN_TEXT';\nvar NODE_FRAGMENT = 'NODE_FRAGMENT';\nvar NODE_TAG_ELEMENT = 'NODE_TAG_ELEMENT';\nvar NODE_VOID_ELEMENT = 'NODE_VOID_ELEMENT';\nvar NODE_PLACEHOLDER = 'NODE_PLACEHOLDER';\nvar NODE_TEXT = 'NODE_TEXT';\n\nvar _excluded = [\"type\", \"children\"];\n\nvar Node = /*#__PURE__*/function () {\n  function Node(_ref) {\n    var type = _ref.type,\n        children = _ref.children,\n        fields = _objectWithoutProperties(_ref, _excluded);\n\n    _classCallCheck(this, Node);\n\n    this.type = type;\n    this.children = children || [];\n\n    for (var key in fields) {\n      this[key] = fields[key];\n    }\n\n    if (fields.token) {\n      this.string = fields.token.string;\n    }\n  }\n\n  _createClass(Node, [{\n    key: \"appendChild\",\n    value: function appendChild(child) {\n      this.children.push(child);\n    }\n  }, {\n    key: \"isLeaf\",\n    get: function get() {\n      return this.children.length === 0;\n    }\n  }]);\n\n  return Node;\n}();\n\nNode.createTagNode = function (token, children) {\n  return new Node({\n    type: NODE_TAG_ELEMENT,\n    children: children,\n    name: token.name,\n    token: token\n  });\n};\n\nNode.createFragmentNode = function (children) {\n  return new Node({\n    type: NODE_FRAGMENT,\n    children: children\n  });\n};\n\nNode.createVoidNode = function (token) {\n  return new Node({\n    type: NODE_VOID_ELEMENT,\n    name: token.name,\n    token: token\n  });\n};\n\nNode.createTextNode = function (token) {\n  return new Node({\n    type: NODE_TEXT,\n    text: token.string,\n    token: token\n  });\n};\n\nNode.createPlaceholderNode = function (token) {\n  return new Node({\n    type: NODE_PLACEHOLDER,\n    name: token.name,\n    token: token\n  });\n};\n\nvar SYNTAX_BUILT_IN = [{\n  type: TOKEN_PLACEHOLDER,\n  regex: /{\\s*(\\w+)\\s*}/g\n}, {\n  type: TOKEN_OPEN_TAG,\n  regex: /<(\\w+)>/g\n}, {\n  type: TOKEN_CLOSE_TAG,\n  regex: /<\\/(\\w+)>/g\n}, {\n  type: TOKEN_SELF_TAG,\n  regex: /<(\\w+)\\s*\\/>/g\n}];\nvar SYNTAX_I18NEXT = [{\n  type: TOKEN_PLACEHOLDER,\n  regex: /{{\\s*(\\w+)\\s*}}/g\n}, {\n  type: TOKEN_OPEN_TAG,\n  regex: /<(\\w+)>/g\n}, {\n  type: TOKEN_CLOSE_TAG,\n  regex: /<\\/(\\w+)>/g\n}, {\n  type: TOKEN_SELF_TAG,\n  regex: /<(\\w+)\\s*\\/>/g\n}];\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n/*\n * return a array of token object\n */\n\nfunction lexer(string, syntax) {\n  var matches = [];\n\n  var _iterator = _createForOfIteratorHelper(syntax),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var rule = _step.value;\n      var type = rule.type,\n          regex = rule.regex;\n      var res;\n\n      while ((res = regex.exec(string)) !== null) {\n        matches.push({\n          type: type,\n          string: res[0],\n          name: res[1],\n          start: res.index,\n          end: res.index + res[0].length\n        });\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  matches.sort(function (a, b) {\n    return a.start - b.start;\n  });\n  var textTokens = [];\n  var start = 0;\n  matches.forEach(function (match) {\n    if (match.start === start) {\n      start = match.end;\n      return;\n    }\n\n    var end = match.start;\n    var text = string.substring(start, end);\n    textTokens.push({\n      type: TOKEN_TEXT,\n      string: text,\n      text: text,\n      start: start,\n      end: end\n    });\n    start = match.end;\n  });\n  var text = string.substring(start);\n\n  if (text !== '') {\n    textTokens.push({\n      type: TOKEN_TEXT,\n      string: text,\n      start: start,\n      end: string.length\n    });\n  }\n\n  var tokens = [].concat(textTokens, matches).sort(function (a, b) {\n    return a.start - b.start;\n  });\n  return tokens;\n}\n\nfunction parser(string, syntax) {\n  if (!syntax) {\n    syntax = SYNTAX_BUILT_IN;\n  }\n\n  var tokens = lexer(string, syntax);\n  var p = new Parser(tokens);\n  return p.parse();\n}\nvar SYNTAX_ERROR = 'Syntax error. Please check if each open tag is closed correctly'; // A special token representing end of the tream\n\nvar EPSILON = {\n  type: 'EPSILON'\n};\n/*\n * A recursive descent parser that construct a syntax tree represeting\n * the DOM hierarchy structure.\n *\n * For instance, the following token\n * <h1>hi <b>{name}</b></h1>\n *\n * Would result in the following tree\n *\n * <h1>\n * ├─ \"hi\"\n * └─ <b>\n *    ├─ {name}\n *\n * The parser is based on the following grammar:\n *\n *   document ::= elementOrData\n *   elementOrData ::= element elementOrData\n *   elementOrData ::= data elementOrData\n *   element ::= <open_tag> elementOrData <close_tag>\n *   data ::= <selfTag>\n *   data ::= <text>\n *   data ::= <placeholder>\n *\n * ref: https://github.com/amghannam/Mini-XML-Recursive-Descent-Parser\n */\n\nvar Parser = /*#__PURE__*/function () {\n  function Parser(tokens) {\n    _classCallCheck(this, Parser);\n\n    this.tokens = [].concat(tokens);\n    this.tags = [];\n  }\n\n  _createClass(Parser, [{\n    key: \"parse\",\n    value: function parse() {\n      var tree = this.document();\n\n      if (!this.predict(EPSILON.type)) {\n        throw new Error(SYNTAX_ERROR);\n      }\n\n      return tree;\n    }\n    /*\n     * @return {Node}\n     */\n\n  }, {\n    key: \"document\",\n    value: function document() {\n      var children = this.elementOrData();\n      return Node.createFragmentNode(children);\n    }\n    /*\n     * @return {Node}\n     */\n\n  }, {\n    key: \"element\",\n    value: function element() {\n      var tagToken = this.openTag();\n      var children = this.elementOrData();\n      this.endTag();\n      return Node.createTagNode(tagToken, children);\n    }\n    /*\n     * @return {Token}\n     */\n\n  }, {\n    key: \"openTag\",\n    value: function openTag() {\n      if (!this.predict(TOKEN_OPEN_TAG)) {\n        throw new Error(SYNTAX_ERROR);\n      }\n\n      this.pushTag(this.lookahead);\n      return this.match(TOKEN_OPEN_TAG);\n    }\n    /*\n     * @return {[]Node}\n     */\n\n  }, {\n    key: \"elementOrData\",\n    value: function elementOrData() {\n      var children = [];\n\n      if (this.predict(TOKEN_OPEN_TAG)) {\n        children.push(this.element());\n        children = children.concat(this.elementOrData());\n      }\n\n      if (this.predict(TOKEN_SELF_TAG, TOKEN_TEXT, TOKEN_PLACEHOLDER)) {\n        var token = this.match(this.lookahead.type);\n        var node;\n\n        switch (token.type) {\n          case TOKEN_SELF_TAG:\n            node = Node.createVoidNode(token);\n            break;\n\n          case TOKEN_TEXT:\n            node = Node.createTextNode(token);\n            break;\n\n          case TOKEN_PLACEHOLDER:\n            node = Node.createPlaceholderNode(token);\n            break;\n        }\n\n        children.push(node);\n        children = children.concat(this.elementOrData());\n      }\n\n      return children;\n    }\n  }, {\n    key: \"endTag\",\n    value: function endTag() {\n      if (!this.predict(TOKEN_CLOSE_TAG)) {\n        throw new Error(SYNTAX_ERROR);\n      }\n\n      var openTag = this.tags.pop();\n\n      if (openTag.name !== this.lookahead.name) {\n        throw new Error(SYNTAX_ERROR);\n      }\n\n      this.match(TOKEN_CLOSE_TAG);\n    }\n  }, {\n    key: \"lookahead\",\n    get: function get() {\n      return this.tokens.length === 0 ? EPSILON : this.tokens[0];\n    }\n  }, {\n    key: \"predict\",\n    value: function predict() {\n      for (var _len = arguments.length, types = new Array(_len), _key = 0; _key < _len; _key++) {\n        types[_key] = arguments[_key];\n      }\n\n      return types.includes(this.lookahead.type);\n    }\n  }, {\n    key: \"match\",\n    value: function match(type) {\n      if (!this.predict(type)) {\n        throw new Error(SYNTAX_ERROR);\n      }\n\n      var token = this.tokens.shift();\n      return token;\n    }\n  }, {\n    key: \"pushTag\",\n    value: function pushTag(token) {\n      this.tags.push(token);\n    }\n  }]);\n\n  return Parser;\n}();\n\nvar createElement = function createElement(node, mapping, keyPrefix) {\n  var children = node.children.map(function (c, i) {\n    return /*#__PURE__*/React.createElement(React.Fragment, {\n      key: keyPrefix + i\n    }, createElement(c, mapping, keyPrefix));\n  });\n\n  switch (node.type) {\n    case NODE_TEXT:\n      {\n        return node.text;\n      }\n\n    case NODE_FRAGMENT:\n      {\n        return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n      }\n\n    case NODE_VOID_ELEMENT:\n      {\n        var val = mapping[node.name];\n\n        if (typeof val === 'function') {\n          return val();\n        }\n\n        return val || /*#__PURE__*/React.createElement(node.name, null);\n      }\n\n    case NODE_TAG_ELEMENT:\n      {\n        var _val = mapping[node.name];\n\n        if (_val === undefined) {\n          return /*#__PURE__*/React.createElement(node.name, null, children);\n        }\n\n        if (typeof _val === 'function') {\n          return _val(children);\n        }\n\n        if ( /*#__PURE__*/React.isValidElement(_val)) {\n          if (React.Children.count(_val.props.children) !== 0) {\n            throw new Error('when passing an element as value, the element should not contains children');\n          }\n\n          return /*#__PURE__*/React.cloneElement(_val, {\n            children: children\n          });\n        }\n\n        throw new Error(\"Invalid mapping value for \\\"\".concat(node.name, \"\\\". Only element or render function are accepted\"));\n      }\n\n    case NODE_PLACEHOLDER:\n      {\n        var _val2 = mapping[node.name];\n\n        if (_val2 === undefined) {\n          console.warn(\"missing \\\"\".concat(node.name, \"\\\" in mapping\"));\n          return node.string;\n        }\n\n        if (typeof _val2 === 'function') {\n          return _val2();\n        }\n\n        return _val2;\n      }\n\n    default:\n      return;\n  }\n};\n\nfunction Interpolate(_ref) {\n  var string = _ref.string,\n      syntax = _ref.syntax,\n      _ref$mapping = _ref.mapping,\n      mapping = _ref$mapping === void 0 ? {} : _ref$mapping,\n      _ref$graceful = _ref.graceful,\n      graceful = _ref$graceful === void 0 ? true : _ref$graceful;\n\n  try {\n    var tree = parser(string, syntax);\n    return createElement(tree, mapping, string);\n  } catch (e) {\n    if (graceful) {\n      console.error(e);\n      return string;\n    } else {\n      throw e;\n    }\n  }\n}\nInterpolate.propTypes = {\n  string: PropTypes.string.isRequired,\n  mapping: PropTypes.object,\n  graceful: PropTypes.bool\n};\n\nexport { SYNTAX_BUILT_IN, SYNTAX_I18NEXT, TOKEN_CLOSE_TAG, TOKEN_OPEN_TAG, TOKEN_PLACEHOLDER, TOKEN_SELF_TAG, Interpolate as default };\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (e.indexOf(n) >= 0) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import useMeasure from \"react-use-measure\";\nimport { AlbersUsa } from \"@visx/geo\";\nimport { statesWithTotalBan } from \"@/data/states\";\nimport { useMemo, useRef } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport idToState from \"@/data/us-abbr.json\";\nimport textures from \"textures\";\nimport { select } from \"d3-selection\";\nimport * as topojson from \"topojson-client\";\nimport topology from \"@/data/usa-topo.json\";\n\nconst { features: unitedStates } = topojson.feature(\n  topology,\n  topology.objects.states\n);\n\nconst UsMap = ({ state, highlightStates }) => {\n  const svgRef = useRef();\n  const [containerRef, { width, height }] = useMeasure();\n\n  const centerX = width / 2;\n  const centerY = height / 2;\n  const scale = (width + height) / 1.55;\n\n  const texture = useMemo(() => {\n    const t = textures\n      .lines()\n      .size(2)\n      .strokeWidth(1)\n      .stroke(\"var(--color-gray-70)\");\n\n    return t;\n  }, []);\n\n  return (\n    <div ref={containerRef} className=\"relative w-full h-full\">\n      {width > 10 && (\n        <svg\n          ref={svgRef}\n          width={width}\n          height={height}\n          className=\"overflow-visible\"\n        >\n          <AlbersUsa\n            data={unitedStates}\n            scale={scale}\n            translate={[centerX, centerY - 25]}\n          >\n            {({ features, projection }) => {\n              select(svgRef.current).call(texture);\n\n              const selectedFeature = features.find(\n                ({ feature }) => idToState[feature.id] === state\n              );\n\n              return (\n                <>\n                  {/* Map */}\n                  {features.map(({ feature, path, projection }, i) => {\n                    return (\n                      <motion.path\n                        key={`map-feature-${feature.id}`}\n                        d={path || \"\"}\n                        fill={\n                          statesWithTotalBan.includes(idToState[feature.id])\n                            ? texture.url()\n                            : highlightStates.includes(idToState[feature.id])\n                            ? \"#E0E2FA\"\n                            : \"#F1F1F1\"\n                        }\n                        stroke={\"white\"}\n                      />\n                    );\n                  })}\n\n                  {/* Selected state */}\n                  {state !== \"US\" && (\n                  <AnimatePresence>\n                    <motion.path\n                      key={`map-feature-${selectedFeature.feature.id}`}\n                      d={selectedFeature?.path || \"\"}\n                      strokeWidth={2}\n                      initial={{ opacity: 0 }}\n                      animate={{\n                        fill: \"#E0E2FA\",\n                        stroke: \"#6168E5\",\n                        opacity: 1,\n                      }}\n                      exit={{ opacity: 0 }}\n                    />\n                  </AnimatePresence>\n                  )}\n                </>\n              );\n            }}\n          </AlbersUsa>\n        </svg>\n      )}\n    </div>\n  );\n};\n\nexport default UsMap;\n","const ShareIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"16\"\n      height=\"13\"\n      viewBox=\"0 0 16 13\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <path\n        d=\"M9.45975 8.51675V11.798L15.4635 6.19175L9.45975 0.604248V3.79175C3.62484 4.598 1.29838 8.59175 0.454102 12.6042C2.53666 9.79175 5.29464 8.51675 9.45975 8.51675Z\"\n        fill=\"currentColor\"\n      />\n    </svg>\n  );\n};\n\nexport default ShareIcon;\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport React, { useEffect, useState } from \"react\";\nimport ShareIcon from \"./ShareIcon\";\n\nconst ShareChartButton = ({ url }) => {\n  const [showNotification, setShowNotification] = useState(false);\n\n  useEffect(() => {\n    const t = setTimeout(() => {\n      setShowNotification(false);\n    }, 2000);\n\n    return () => clearTimeout(t);\n  }, [showNotification]);\n\n  return (\n    <button\n      className=\"h-10 relative flex items-center text-new-navy font-medium gap-2 text-xs bg-[#F0F1FD] rounded-full px-3 py-1 hover:text-white hover:bg-new-violet-blue hover:underline st-share-btn\"\n      onClick={() => {\n        setShowNotification(true);\n        navigator.clipboard.writeText(url);\n      }}\n    >\n      <span className=\"relative block\">\n        Share this link\n        <AnimatePresence>\n          {showNotification && (\n            <span className=\"absolute block text-xs -translate-x-1/2 -translate-y-full -top-2 left-1/2 w-max text-gray-40\">\n              <motion.span\n                className=\"block px-2 py-1 border rounded shadow\"\n                initial={{ opacity: 0, y: 10 }}\n                animate={{ opacity: 1, y: 0 }}\n                exit={{ opacity: 0, y: 10 }}\n              >\n                Link copied\n              </motion.span>\n            </span>\n          )}\n        </AnimatePresence>\n      </span>\n      <ShareIcon className=\"size-3\" />\n    </button>\n  );\n};\n\nexport default ShareChartButton;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgLz4KICA8cG9seWxpbmUgcG9pbnRzPSI3IDEwIDEyIDE1IDE3IDEwIiAvPgogIDxsaW5lIHgxPSIxMiIgeDI9IjEyIiB5MT0iMTUiIHkyPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Download = createLucideIcon('Download', [\n  ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n  ['polyline', { points: '7 10 12 15 17 10', key: '2ggqvy' }],\n  ['line', { x1: '12', x2: '12', y1: '15', y2: '3', key: '1vk2je' }],\n]);\n\nexport default Download;\n","import { Download } from \"lucide-react\";\n\nconst DownloadDataButton = ({ url }) => {\n\n  const handleClick = () => {\n    window.open(url, '_blank', 'noopener,noreferrer');\n  };\n\n  return (\n    <button\n      className=\"st-download-btn h-10 relative flex items-center text-new-navy font-medium gap-2 text-xs bg-[#F0F1FD] rounded-full px-3 py-1 hover:text-white hover:bg-new-violet-blue hover:underline\"\n      onClick={() => handleClick()}\n    >\n      <span className=\"relative block\">\n        Download the data\n      </span>\n      <Download className=\"size-3\" />\n    </button>\n  );\n};\n\nexport default DownloadDataButton;","import { abToState } from \"@/data/states\";\nimport { cn } from \"@/lib/utils\";\n// import Image from \"next/image\";\nimport React from \"react\";\n\nconst SectionSubtitle = ({ state, className, children, ...props }) => {\n  return (\n    <div className={cn(\"flex gap-1\", className)} {...props}>\n      <img src={`${process.env.PUBLIC_URL}/svg/states/state-svgs_${state}.svg`} height=\"15\" width=\"15\" alt=\"Icon of selected state\" />\n\n      <div className=\"st-state-kicker text-xs font-bold uppercase text-gray-40\">\n        {abToState[state]}\n      </div>\n      <div className=\"st-date-kicker text-xs uppercase text-gray-40\">{children}</div>\n    </div>\n  );\n};\n\nexport default SectionSubtitle;\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n *  Separator\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Separator';\nconst DEFAULT_ORIENTATION = 'horizontal';\nconst ORIENTATIONS = ['horizontal', 'vertical'] as const;\n\ntype Orientation = (typeof ORIENTATIONS)[number];\ntype SeparatorElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface SeparatorProps extends PrimitiveDivProps {\n  /**\n   * Either `vertical` or `horizontal`. Defaults to `horizontal`.\n   */\n  orientation?: Orientation;\n  /**\n   * Whether or not the component is purely decorative. When true, accessibility-related attributes\n   * are updated so that that the rendered element is removed from the accessibility tree.\n   */\n  decorative?: boolean;\n}\n\nconst Separator = React.forwardRef<SeparatorElement, SeparatorProps>((props, forwardedRef) => {\n  const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n  const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n  // `aria-orientation` defaults to `horizontal` so we only need it if `orientation` is vertical\n  const ariaOrientation = orientation === 'vertical' ? orientation : undefined;\n  const semanticProps = decorative\n    ? { role: 'none' }\n    : { 'aria-orientation': ariaOrientation, role: 'separator' };\n\n  return (\n    <Primitive.div\n      data-orientation={orientation}\n      {...semanticProps}\n      {...domProps}\n      ref={forwardedRef}\n    />\n  );\n});\n\nSeparator.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isValidOrientation(orientation: any): orientation is Orientation {\n  return ORIENTATIONS.includes(orientation);\n}\n\nconst Root = Separator;\n\nexport {\n  Separator,\n  //\n  Root,\n};\nexport type { SeparatorProps };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Separator = React.forwardRef((\n  { className, orientation = \"horizontal\", decorative = true, ...props },\n  ref\n) => (\n  <SeparatorPrimitive.Root\n    ref={ref}\n    decorative={decorative}\n    orientation={orientation}\n    className={cn(\n      \"shrink-0 bg-border\",\n      orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n      className\n    )}\n    {...props} />\n))\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n  const ref = React.useRef({ value, previous: value });\n\n  // We compare values before making an update to ensure that\n  // a change has been made. This ensures the previous value is\n  // persisted correctly between renders.\n  return React.useMemo(() => {\n    if (ref.current.value !== value) {\n      ref.current.previous = ref.current.value;\n      ref.current.value = value;\n    }\n    return ref.current.previous;\n  }, [value]);\n}\n\nexport { usePrevious };\n","/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\nfunction useSize(element: HTMLElement | null) {\n  const [size, setSize] = React.useState<{ width: number; height: number } | undefined>(undefined);\n\n  useLayoutEffect(() => {\n    if (element) {\n      // provide size as early as possible\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n\n        // Since we only observe the one element, we don't need to loop over the\n        // array\n        if (!entries.length) {\n          return;\n        }\n\n        const entry = entries[0];\n        let width: number;\n        let height: number;\n\n        if ('borderBoxSize' in entry) {\n          const borderSizeEntry = entry['borderBoxSize'];\n          // iron out differences between browsers\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize['inlineSize'];\n          height = borderSize['blockSize'];\n        } else {\n          // for browsers that don't support `borderBoxSize`\n          // we calculate it ourselves to get the correct border box.\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n\n        setSize({ width, height });\n      });\n\n      resizeObserver.observe(element, { box: 'border-box' });\n\n      return () => resizeObserver.unobserve(element);\n    } else {\n      // We only want to reset to `undefined` when the element becomes `null`,\n      // not if it changes to another element.\n      setSize(undefined);\n    }\n  }, [element]);\n\n  return size;\n}\n\nexport { useSize };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Switch\n * -----------------------------------------------------------------------------------------------*/\n\nconst SWITCH_NAME = 'Switch';\n\ntype ScopedProps<P> = P & { __scopeSwitch?: Scope };\nconst [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\n\ntype SwitchContextValue = { checked: boolean; disabled?: boolean };\nconst [SwitchProvider, useSwitchContext] = createSwitchContext<SwitchContextValue>(SWITCH_NAME);\n\ntype SwitchElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SwitchProps extends PrimitiveButtonProps {\n  checked?: boolean;\n  defaultChecked?: boolean;\n  required?: boolean;\n  onCheckedChange?(checked: boolean): void;\n}\n\nconst Switch = React.forwardRef<SwitchElement, SwitchProps>(\n  (props: ScopedProps<SwitchProps>, forwardedRef) => {\n    const {\n      __scopeSwitch,\n      name,\n      checked: checkedProp,\n      defaultChecked,\n      required,\n      disabled,\n      value = 'on',\n      onCheckedChange,\n      ...switchProps\n    } = props;\n    const [button, setButton] = React.useState<HTMLButtonElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n    const hasConsumerStoppedPropagationRef = React.useRef(false);\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    const isFormControl = button ? Boolean(button.closest('form')) : true;\n    const [checked = false, setChecked] = useControllableState({\n      prop: checkedProp,\n      defaultProp: defaultChecked,\n      onChange: onCheckedChange,\n    });\n\n    return (\n      <SwitchProvider scope={__scopeSwitch} checked={checked} disabled={disabled}>\n        <Primitive.button\n          type=\"button\"\n          role=\"switch\"\n          aria-checked={checked}\n          aria-required={required}\n          data-state={getState(checked)}\n          data-disabled={disabled ? '' : undefined}\n          disabled={disabled}\n          value={value}\n          {...switchProps}\n          ref={composedRefs}\n          onClick={composeEventHandlers(props.onClick, (event) => {\n            setChecked((prevChecked) => !prevChecked);\n            if (isFormControl) {\n              hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n              // if switch is in a form, stop propagation from the button so that we only propagate\n              // one click event (from the input). We propagate changes from an input so that native\n              // form validation works and form events reflect switch updates.\n              if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n            }\n          })}\n        />\n        {isFormControl && (\n          <BubbleInput\n            control={button}\n            bubbles={!hasConsumerStoppedPropagationRef.current}\n            name={name}\n            value={value}\n            checked={checked}\n            required={required}\n            disabled={disabled}\n            // We transform because the input is absolutely positioned but we have\n            // rendered it **after** the button. This pulls it back to sit on top\n            // of the button.\n            style={{ transform: 'translateX(-100%)' }}\n          />\n        )}\n      </SwitchProvider>\n    );\n  }\n);\n\nSwitch.displayName = SWITCH_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SwitchThumb';\n\ntype SwitchThumbElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SwitchThumbProps extends PrimitiveSpanProps {}\n\nconst SwitchThumb = React.forwardRef<SwitchThumbElement, SwitchThumbProps>(\n  (props: ScopedProps<SwitchThumbProps>, forwardedRef) => {\n    const { __scopeSwitch, ...thumbProps } = props;\n    const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n    return (\n      <Primitive.span\n        data-state={getState(context.checked)}\n        data-disabled={context.disabled ? '' : undefined}\n        {...thumbProps}\n        ref={forwardedRef}\n      />\n    );\n  }\n);\n\nSwitchThumb.displayName = THUMB_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit<InputProps, 'checked'> {\n  checked: boolean;\n  control: HTMLElement | null;\n  bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n  const { control, checked, bubbles = true, ...inputProps } = props;\n  const ref = React.useRef<HTMLInputElement>(null);\n  const prevChecked = usePrevious(checked);\n  const controlSize = useSize(control);\n\n  // Bubble checked change to parents (e.g form change event)\n  React.useEffect(() => {\n    const input = ref.current!;\n    const inputProto = window.HTMLInputElement.prototype;\n    const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n    const setChecked = descriptor.set;\n    if (prevChecked !== checked && setChecked) {\n      const event = new Event('click', { bubbles });\n      setChecked.call(input, checked);\n      input.dispatchEvent(event);\n    }\n  }, [prevChecked, checked, bubbles]);\n\n  return (\n    <input\n      type=\"checkbox\"\n      aria-hidden\n      defaultChecked={checked}\n      {...inputProps}\n      tabIndex={-1}\n      ref={ref}\n      style={{\n        ...props.style,\n        ...controlSize,\n        position: 'absolute',\n        pointerEvents: 'none',\n        opacity: 0,\n        margin: 0,\n      }}\n    />\n  );\n};\n\nfunction getState(checked: boolean) {\n  return checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Switch;\nconst Thumb = SwitchThumb;\n\nexport {\n  createSwitchScope,\n  //\n  Switch,\n  SwitchThumb,\n  //\n  Root,\n  Thumb,\n};\nexport type { SwitchProps, SwitchThumbProps };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Switch = React.forwardRef(({ className, ...props }, ref) => (\n  <SwitchPrimitives.Root\n    className={cn(\n      \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-[#C9C9C9] data-[state=unchecked]:bg-[#C9C9C9]\",\n      className\n    )}\n    {...props}\n    ref={ref}>\n    <SwitchPrimitives.Thumb\n      className={cn(\n        \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n      )} />\n  </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","/* eslint-disable eqeqeq */\nimport { cn } from \"@/lib/utils\";\nimport { Switch } from \"./ui/switch\";\n\nconst FlowToggle = ({ showOutflow, setShowOutflow, className }) => {\n  function setToggleClass(showOutflow, flow) {\n    if (flow == \"inflow\") {\n      let toggleClass = !showOutflow ? \"font-bold\" : \"\";\n      return toggleClass;\n    } else {\n      let toggleClass = showOutflow ? \"font-bold\" : \"\";\n      return toggleClass;\n    }\n  }\n\n  return (\n    <div className=\"flex flex-row items-center\">\n      <div className=\"toggle\">\n        <div\n          className={cn(\n            \"flex items-center space-x-2 text-xs text-gray-40\",\n            className,\n          )}\n        >\n          <div\n            className={\"text-right \" + setToggleClass(showOutflow, \"inflow\")}\n          >\n            Inflow\n          </div>\n          <div className=\"relative m-0 ml-0 mr-0\">\n            <Switch\n              id=\"airplane-mode\"\n              checked={showOutflow}\n              onCheckedChange={setShowOutflow}\n              className={\"!bg-[#F0F1FD]\"}\n            />\n            <div className=\"absolute -top-1 left-1/2 -translate-x-1/2 -translate-y-full font-bold\">\n              SHOW\n            </div>\n          </div>\n          <div\n            className={\"text-left \" + setToggleClass(showOutflow, \"outflow\")}\n          >\n            Outflow\n          </div>\n        </div>\n      </div>\n      <div className=\"note py-2 pl-4 text-xs italic text-gray-40\">\n        Note: Counts &lt;100 not shown.\n      </div>\n    </div>\n  );\n};\n\nexport default FlowToggle;\n","function clamp(value: number, [min, max]: [number, number]): number {\n  return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n  layers: new Set<DismissableLayerElement>(),\n  layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n  branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: boolean;\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  onEscapeKeyDown?: (event: KeyboardEvent) => void;\n  /**\n   * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n  /**\n   * Event handler called when the focus moves outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  onFocusOutside?: (event: FocusOutsideEvent) => void;\n  /**\n   * Event handler called when an interaction happens outside the `DismissableLayer`.\n   * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n   * Can be prevented.\n   */\n  onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState<DismissableLayerElement | null>(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target as HTMLElement;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target as HTMLElement;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = 'none';\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (\n          disableOutsidePointerEvents &&\n          context.layersWithOutsidePointerEventsDisabled.size === 1\n        ) {\n          ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n    /**\n     * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n     * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n     * and add it to the end again so the layering order wouldn't be _creation order_.\n     * We only want them to be removed from context stacks when unmounted.\n     */\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n\n    return (\n      <Primitive.div\n        {...layerProps}\n        ref={composedRefs}\n        style={{\n          pointerEvents: isBodyPointerEventsDisabled\n            ? isPointerEventsEnabled\n              ? 'auto'\n              : 'none'\n            : undefined,\n          ...props.style,\n        }}\n        onFocusCapture={composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture)}\n        onBlurCapture={composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture)}\n        onPointerDownCapture={composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )}\n      />\n    );\n  }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n  DismissableLayerBranchElement,\n  DismissableLayerBranchProps\n>((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef<DismissableLayerBranchElement>(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n\n  return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n  onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {});\n\n  React.useEffect(() => {\n    const handlePointerDown = (event: PointerEvent) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n\n        function handleAndDispatchPointerDownOutsideEvent() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        }\n\n        /**\n         * On touch devices, we need to wait for a click event because browsers implement\n         * a ~350ms delay between the time the user stops touching the display and when the\n         * browser executres events. We need to ensure we don't reactivate pointer-events within\n         * this timeframe otherwise the browser may execute events that should have been prevented.\n         *\n         * Additionally, this also lets us deal automatically with cancellations when a click event\n         * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n         *\n         * This is why we also continuously remove the previous listener, because we cannot be\n         * certain that it was raised, and therefore cleaned-up.\n         */\n        if (event.pointerType === 'touch') {\n          ownerDocument.removeEventListener('click', handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n          ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent();\n        }\n      } else {\n        // We need to remove the event listener in case the outside click has been canceled.\n        // See: https://github.com/radix-ui/primitives/issues/2171\n        ownerDocument.removeEventListener('click', handleClickRef.current);\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    /**\n     * if this hook executes in a component that mounts via a `pointerdown` event, the event\n     * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n     * this by delaying the event listener registration on the document.\n     * This is not React specific, but rather how the DOM works, ie:\n     * ```\n     * button.addEventListener('pointerdown', () => {\n     *   console.log('I will log');\n     *   document.addEventListener('pointerdown', () => {\n     *     console.log('I will also log');\n     *   })\n     * });\n     */\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener('pointerdown', handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n      ownerDocument.removeEventListener('click', handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n  };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n  onFocusOutside?: (event: FocusOutsideEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n  const isFocusInsideReactTreeRef = React.useRef(false);\n\n  React.useEffect(() => {\n    const handleFocus = (event: FocusEvent) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false,\n        });\n      }\n    };\n    ownerDocument.addEventListener('focusin', handleFocus);\n    return () => ownerDocument.removeEventListener('focusin', handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n\n  return {\n    onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n    onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n  };\n}\n\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n  name: string,\n  handler: ((event: E) => void) | undefined,\n  detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n  { discrete }: { discrete: boolean }\n) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n  DismissableLayer,\n  DismissableLayerBranch,\n  //\n  Root,\n  Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n  onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n  ownerDocument: Document = globalThis?.document\n) {\n  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n  React.useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onEscapeKeyDown(event);\n      }\n    };\n    ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n    return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n  }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n","import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n  useFocusGuards();\n  return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n  React.useEffect(() => {\n    const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n    document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n    document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n    count++;\n\n    return () => {\n      if (count === 1) {\n        document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n      }\n      count--;\n    };\n  }, []);\n}\n\nfunction createFocusGuard() {\n  const element = document.createElement('span');\n  element.setAttribute('data-radix-focus-guard', '');\n  element.tabIndex = 0;\n  element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';\n  return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n  FocusGuards,\n  //\n  Root,\n  //\n  useFocusGuards,\n};\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface FocusScopeProps extends PrimitiveDivProps {\n  /**\n   * When `true`, tabbing from last item will focus first tabbable\n   * and shift+tab from first item will focus last tababble.\n   * @defaultValue false\n   */\n  loop?: boolean;\n\n  /**\n   * When `true`, focus cannot escape the focus scope via keyboard,\n   * pointer, or a programmatic focus.\n   * @defaultValue false\n   */\n  trapped?: boolean;\n\n  /**\n   * Event handler called when auto-focusing on mount.\n   * Can be prevented.\n   */\n  onMountAutoFocus?: (event: Event) => void;\n\n  /**\n   * Event handler called when auto-focusing on unmount.\n   * Can be prevented.\n   */\n  onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef<FocusScopeElement, FocusScopeProps>((props, forwardedRef) => {\n  const {\n    loop = false,\n    trapped = false,\n    onMountAutoFocus: onMountAutoFocusProp,\n    onUnmountAutoFocus: onUnmountAutoFocusProp,\n    ...scopeProps\n  } = props;\n  const [container, setContainer] = React.useState<HTMLElement | null>(null);\n  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n  const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n  const focusScope = React.useRef({\n    paused: false,\n    pause() {\n      this.paused = true;\n    },\n    resume() {\n      this.paused = false;\n    },\n  }).current;\n\n  // Takes care of trapping focus if focus is moved outside programmatically for example\n  React.useEffect(() => {\n    if (trapped) {\n      function handleFocusIn(event: FocusEvent) {\n        if (focusScope.paused || !container) return;\n        const target = event.target as HTMLElement | null;\n        if (container.contains(target)) {\n          lastFocusedElementRef.current = target;\n        } else {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }\n\n      function handleFocusOut(event: FocusEvent) {\n        if (focusScope.paused || !container) return;\n        const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n        // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n        //\n        // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n        // 2. In Google Chrome, when the focused element is removed from the DOM.\n        //\n        // We let the browser do its thing here because:\n        //\n        // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n        // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n        //    throws the CPU to 100%, so we avoid doing anything for this reason here too.\n        if (relatedTarget === null) return;\n\n        // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n        // that is outside the container, we move focus to the last valid focused element inside.\n        if (!container.contains(relatedTarget)) {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }\n\n      // When the focused element gets removed from the DOM, browsers move focus\n      // back to the document.body. In this case, we move focus to the container\n      // to keep focus trapped correctly.\n      function handleMutations(mutations: MutationRecord[]) {\n        const focusedElement = document.activeElement as HTMLElement | null;\n        if (focusedElement !== document.body) return;\n        for (const mutation of mutations) {\n          if (mutation.removedNodes.length > 0) focus(container);\n        }\n      }\n\n      document.addEventListener('focusin', handleFocusIn);\n      document.addEventListener('focusout', handleFocusOut);\n      const mutationObserver = new MutationObserver(handleMutations);\n      if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n      return () => {\n        document.removeEventListener('focusin', handleFocusIn);\n        document.removeEventListener('focusout', handleFocusOut);\n        mutationObserver.disconnect();\n      };\n    }\n  }, [trapped, container, focusScope.paused]);\n\n  React.useEffect(() => {\n    if (container) {\n      focusScopesStack.add(focusScope);\n      const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n      const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n      if (!hasFocusedCandidate) {\n        const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n        container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        container.dispatchEvent(mountEvent);\n        if (!mountEvent.defaultPrevented) {\n          focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n          if (document.activeElement === previouslyFocusedElement) {\n            focus(container);\n          }\n        }\n      }\n\n      return () => {\n        container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n        // We hit a react bug (fixed in v17) with focusing in unmount.\n        // We need to delay the focus a little to get around it for now.\n        // See: https://github.com/facebook/react/issues/17894\n        setTimeout(() => {\n          const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n          container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          container.dispatchEvent(unmountEvent);\n          if (!unmountEvent.defaultPrevented) {\n            focus(previouslyFocusedElement ?? document.body, { select: true });\n          }\n          // we need to remove the listener after we `dispatchEvent`\n          container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n          focusScopesStack.remove(focusScope);\n        }, 0);\n      };\n    }\n  }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n  // Takes care of looping focus (when tabbing whilst at the edges)\n  const handleKeyDown = React.useCallback(\n    (event: React.KeyboardEvent) => {\n      if (!loop && !trapped) return;\n      if (focusScope.paused) return;\n\n      const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n      const focusedElement = document.activeElement as HTMLElement | null;\n\n      if (isTabKey && focusedElement) {\n        const container = event.currentTarget as HTMLElement;\n        const [first, last] = getTabbableEdges(container);\n        const hasTabbableElementsInside = first && last;\n\n        // we can only wrap focus if we have tabbable edges\n        if (!hasTabbableElementsInside) {\n          if (focusedElement === container) event.preventDefault();\n        } else {\n          if (!event.shiftKey && focusedElement === last) {\n            event.preventDefault();\n            if (loop) focus(first, { select: true });\n          } else if (event.shiftKey && focusedElement === first) {\n            event.preventDefault();\n            if (loop) focus(last, { select: true });\n          }\n        }\n      }\n    },\n    [loop, trapped, focusScope.paused]\n  );\n\n  return (\n    <Primitive.div tabIndex={-1} {...scopeProps} ref={composedRefs} onKeyDown={handleKeyDown} />\n  );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n  const previouslyFocusedElement = document.activeElement;\n  for (const candidate of candidates) {\n    focus(candidate, { select });\n    if (document.activeElement !== previouslyFocusedElement) return;\n  }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n  const candidates = getTabbableCandidates(container);\n  const first = findVisible(candidates, container);\n  const last = findVisible(candidates.reverse(), container);\n  return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n  const nodes: HTMLElement[] = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node: any) => {\n      const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n      // runtime's understanding of tabbability, so this automatically accounts\n      // for any kind of element that could be tabbed to.\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    },\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n  // we do not take into account the order of nodes with positive `tabIndex` as it\n  // hinders accessibility to have tab order different from visual order.\n  return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n  for (const element of elements) {\n    // we stop checking if it's hidden at the `container` level (excluding)\n    if (!isHidden(element, { upTo: container })) return element;\n  }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n  if (getComputedStyle(node).visibility === 'hidden') return true;\n  while (node) {\n    // we stop at `upTo` (excluding it)\n    if (upTo !== undefined && node === upTo) return false;\n    if (getComputedStyle(node).display === 'none') return true;\n    node = node.parentElement as HTMLElement;\n  }\n  return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n  return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n  // only focus if that element is focusable\n  if (element && element.focus) {\n    const previouslyFocusedElement = document.activeElement;\n    // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n    element.focus({ preventScroll: true });\n    // only select if its not the same element, it supports selection and we need to select\n    if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n      element.select();\n  }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n  /** A stack of focus scopes, with the active one at the top */\n  let stack: FocusScopeAPI[] = [];\n\n  return {\n    add(focusScope: FocusScopeAPI) {\n      // pause the currently active focus scope (at the top of the stack)\n      const activeFocusScope = stack[0];\n      if (focusScope !== activeFocusScope) {\n        activeFocusScope?.pause();\n      }\n      // remove in case it already exists (because we'll re-add it at the top of the stack)\n      stack = arrayRemove(stack, focusScope);\n      stack.unshift(focusScope);\n    },\n\n    remove(focusScope: FocusScopeAPI) {\n      stack = arrayRemove(stack, focusScope);\n      stack[0]?.resume();\n    },\n  };\n}\n\nfunction arrayRemove<T>(array: T[], item: T) {\n  const updatedArray = [...array];\n  const index = updatedArray.indexOf(item);\n  if (index !== -1) {\n    updatedArray.splice(index, 1);\n  }\n  return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n  return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n  FocusScope,\n  //\n  Root,\n};\nexport type { FocusScopeProps };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isYAxis) {\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const webkit = isWebKit();\n  const css = getComputedStyle(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = currentWin.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = currentWin.frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n  return topLayerSelectors.some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, 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  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  const x = rect.left + scroll.scrollLeft - offsets.x;\n  const y = rect.top + scroll.scrollTop - offsets.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, offset as offset$1, shift as shift$1, limitShift as limitShift$1, flip as flip$1, size as size$1, autoPlacement as autoPlacement$1, hide as hide$1, inline as inline$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        isPositioned: true\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Arrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Arrow';\n\ntype ArrowElement = React.ElementRef<typeof Primitive.svg>;\ntype PrimitiveSvgProps = React.ComponentPropsWithoutRef<typeof Primitive.svg>;\ninterface ArrowProps extends PrimitiveSvgProps {}\n\nconst Arrow = React.forwardRef<ArrowElement, ArrowProps>((props, forwardedRef) => {\n  const { children, width = 10, height = 5, ...arrowProps } = props;\n  return (\n    <Primitive.svg\n      {...arrowProps}\n      ref={forwardedRef}\n      width={width}\n      height={height}\n      viewBox=\"0 0 30 10\"\n      preserveAspectRatio=\"none\"\n    >\n      {/* We use their children if they're slotting to replace the whole svg */}\n      {props.asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n    </Primitive.svg>\n  );\n});\n\nArrow.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Arrow;\n\nexport {\n  Arrow,\n  //\n  Root,\n};\nexport type { ArrowProps };\n","import * as React from 'react';\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size,\n} from '@floating-ui/react-dom';\nimport * as ArrowPrimitive from '@radix-ui/react-arrow';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useSize } from '@radix-ui/react-use-size';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type { Scope } from '@radix-ui/react-context';\nimport type { Measurable } from '@radix-ui/rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n  anchor: Measurable | null;\n  onAnchorChange(anchor: Measurable | null): void;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n  children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n  return (\n    <PopperProvider scope={__scopePopper} anchor={anchor} onAnchorChange={setAnchor}>\n      {children}\n    </PopperProvider>\n  );\n};\n\nPopper.displayName = POPPER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n  virtualRef?: React.RefObject<Measurable>;\n}\n\nconst PopperAnchor = React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n  (props: ScopedProps<PopperAnchorProps>, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef<PopperAnchorElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n\n    React.useEffect(() => {\n      // Consumer can anchor the popper to something that isn't\n      // a DOM node e.g. pointer position, so we override the\n      // `anchorRef` with their virtual ref in this case.\n      context.onAnchorChange(virtualRef?.current || ref.current);\n    });\n\n    return virtualRef ? null : <Primitive.div {...anchorProps} ref={composedRefs} />;\n  }\n);\n\nPopperAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n  placedSide: Side;\n  onArrowChange(arrow: HTMLSpanElement | null): void;\n  arrowX?: number;\n  arrowY?: number;\n  shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n  createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ElementRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n  side?: Side;\n  sideOffset?: number;\n  align?: Align;\n  alignOffset?: number;\n  arrowPadding?: number;\n  avoidCollisions?: boolean;\n  collisionBoundary?: Boundary | Boundary[];\n  collisionPadding?: number | Partial<Record<Side, number>>;\n  sticky?: 'partial' | 'always';\n  hideWhenDetached?: boolean;\n  updatePositionStrategy?: 'optimized' | 'always';\n  onPlaced?: () => void;\n}\n\nconst PopperContent = React.forwardRef<PopperContentElement, PopperContentProps>(\n  (props: ScopedProps<PopperContentProps>, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = 'bottom',\n      sideOffset = 0,\n      align = 'center',\n      alignOffset = 0,\n      arrowPadding = 0,\n      avoidCollisions = true,\n      collisionBoundary = [],\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = 'partial',\n      hideWhenDetached = false,\n      updatePositionStrategy = 'optimized',\n      onPlaced,\n      ...contentProps\n    } = props;\n\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n    const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n\n    const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n\n    const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n    const collisionPadding =\n      typeof collisionPaddingProp === 'number'\n        ? collisionPaddingProp\n        : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n    const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n    const hasExplicitBoundaries = boundary.length > 0;\n\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries,\n    };\n\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: 'fixed',\n      placement: desiredPlacement,\n      whileElementsMounted: (...args) => {\n        const cleanup = autoUpdate(...args, {\n          animationFrame: updatePositionStrategy === 'always',\n        });\n        return cleanup;\n      },\n      elements: {\n        reference: context.anchor,\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions &&\n          shift({\n            mainAxis: true,\n            crossAxis: false,\n            limiter: sticky === 'partial' ? limitShift() : undefined,\n            ...detectOverflowOptions,\n          }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n            contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n            contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n            contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n          },\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({ strategy: 'referenceHidden', ...detectOverflowOptions }),\n      ],\n    });\n\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n    const [contentZIndex, setContentZIndex] = React.useState<string>();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n\n    return (\n      <div\n        ref={refs.setFloating}\n        data-radix-popper-content-wrapper=\"\"\n        style={{\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n          minWidth: 'max-content',\n          zIndex: contentZIndex,\n          ['--radix-popper-transform-origin' as any]: [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y,\n          ].join(' '),\n\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...(middlewareData.hide?.referenceHidden && {\n            visibility: 'hidden',\n            pointerEvents: 'none',\n          }),\n        }}\n        // Floating UI interally calculates logical alignment based the `dir` attribute on\n        // the reference/floating node, we must add this attribute here to ensure\n        // this is calculated when portalled as well as inline.\n        dir={props.dir}\n      >\n        <PopperContentProvider\n          scope={__scopePopper}\n          placedSide={placedSide}\n          onArrowChange={setArrow}\n          arrowX={arrowX}\n          arrowY={arrowY}\n          shouldHideArrow={cannotCenterArrow}\n        >\n          <Primitive.div\n            data-side={placedSide}\n            data-align={placedAlign}\n            {...contentProps}\n            ref={composedRefs}\n            style={{\n              ...contentProps.style,\n              // if the PopperContent hasn't been placed yet (not all measurements done)\n              // we prevent animations so that users's animation don't kick in too early referring wrong sides\n              animation: !isPositioned ? 'none' : undefined,\n            }}\n          />\n        </PopperContentProvider>\n      </div>\n    );\n  }\n);\n\nPopperContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n  top: 'bottom',\n  right: 'left',\n  bottom: 'top',\n  left: 'right',\n};\n\ntype PopperArrowElement = React.ElementRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = React.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = React.forwardRef<PopperArrowElement, PopperArrowProps>(function PopperArrow(\n  props: ScopedProps<PopperArrowProps>,\n  forwardedRef\n) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    <span\n      ref={contentContext.onArrowChange}\n      style={{\n        position: 'absolute',\n        left: contentContext.arrowX,\n        top: contentContext.arrowY,\n        [baseSide]: 0,\n        transformOrigin: {\n          top: '',\n          right: '0 0',\n          bottom: 'center 0',\n          left: '100% 0',\n        }[contentContext.placedSide],\n        transform: {\n          top: 'translateY(100%)',\n          right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n          bottom: `rotate(180deg)`,\n          left: 'translateY(50%) rotate(-90deg) translateX(50%)',\n        }[contentContext.placedSide],\n        visibility: contentContext.shouldHideArrow ? 'hidden' : undefined,\n      }}\n    >\n      <ArrowPrimitive.Root\n        {...arrowProps}\n        ref={forwardedRef}\n        style={{\n          ...arrowProps.style,\n          // ensures the element can be measured correctly (mostly for if SVG)\n          display: 'block',\n        }}\n      />\n    </span>\n  );\n});\n\nPopperArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n  return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n  name: 'transformOrigin',\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n    let x = '';\n    let y = '';\n\n    if (placedSide === 'bottom') {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === 'top') {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === 'right') {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === 'left') {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  },\n});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n  const [side, align = 'center'] = placement.split('-');\n  return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n  createPopperScope,\n  //\n  Popper,\n  PopperAnchor,\n  PopperContent,\n  PopperArrow,\n  //\n  Root,\n  Anchor,\n  Content,\n  Arrow,\n  //\n  SIDE_OPTIONS,\n  ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\n","import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n  /**\n   * An optional container where the portaled content should be appended.\n   */\n  container?: Element | null;\n}\n\nconst Portal = React.forwardRef<PortalElement, PortalProps>((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || (mounted && globalThis?.document?.body);\n  return container\n    ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n    : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n  Portal,\n  //\n  Root,\n};\nexport type { PortalProps };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * VisuallyHidden\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'VisuallyHidden';\n\ntype VisuallyHiddenElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface VisuallyHiddenProps extends PrimitiveSpanProps {}\n\nconst VisuallyHidden = React.forwardRef<VisuallyHiddenElement, VisuallyHiddenProps>(\n  (props, forwardedRef) => {\n    return (\n      <Primitive.span\n        {...props}\n        ref={forwardedRef}\n        style={{\n          // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss\n          position: 'absolute',\n          border: 0,\n          width: 1,\n          height: 1,\n          padding: 0,\n          margin: -1,\n          overflow: 'hidden',\n          clip: 'rect(0, 0, 0, 0)',\n          whiteSpace: 'nowrap',\n          wordWrap: 'normal',\n          ...props.style,\n        }}\n      />\n    );\n  }\n);\n\nVisuallyHidden.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = VisuallyHidden;\n\nexport {\n  VisuallyHidden,\n  //\n  Root,\n};\nexport type { VisuallyHiddenProps };\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(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)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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}\n\nexport function __generator(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}\n\nexport var __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});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n    return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n    var ref = React.useRef(null);\n    var _a = React.useState({\n        onScrollCapture: nothing,\n        onWheelCapture: nothing,\n        onTouchMoveCapture: nothing,\n    }), callbacks = _a[0], setCallbacks = _a[1];\n    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n    var SideCar = sideCar;\n    var containerRef = useMergeRefs([ref, parentRef]);\n    var containerProps = __assign(__assign({}, rest), callbacks);\n    return (React.createElement(React.Fragment, null,\n        enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n        forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n    enabled: true,\n    removeScrollBar: true,\n    inert: false,\n};\nRemoveScroll.classNames = {\n    fullWidth: fullWidthClassName,\n    zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n    var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n    if (!sideCar) {\n        throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n    }\n    var Target = sideCar.read();\n    if (!Target) {\n        throw new Error('Sidecar medium not found');\n    }\n    return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n    medium.useMedium(exported);\n    return SideCar;\n}\n","var currentNonce;\nexport var setNonce = function (nonce) {\n    currentNonce = nonce;\n};\nexport var getNonce = function () {\n    if (currentNonce) {\n        return currentNonce;\n    }\n    if (typeof __webpack_nonce__ !== 'undefined') {\n        return __webpack_nonce__;\n    }\n    return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n    if (!document)\n        return null;\n    var tag = document.createElement('style');\n    tag.type = 'text/css';\n    var nonce = getNonce();\n    if (nonce) {\n        tag.setAttribute('nonce', nonce);\n    }\n    return tag;\n}\nfunction injectStyles(tag, css) {\n    // @ts-ignore\n    if (tag.styleSheet) {\n        // @ts-ignore\n        tag.styleSheet.cssText = css;\n    }\n    else {\n        tag.appendChild(document.createTextNode(css));\n    }\n}\nfunction insertStyleTag(tag) {\n    var head = document.head || document.getElementsByTagName('head')[0];\n    head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n    var counter = 0;\n    var stylesheet = null;\n    return {\n        add: function (style) {\n            if (counter == 0) {\n                if ((stylesheet = makeStyleTag())) {\n                    injectStyles(stylesheet, style);\n                    insertStyleTag(stylesheet);\n                }\n            }\n            counter++;\n        },\n        remove: function () {\n            counter--;\n            if (!counter && stylesheet) {\n                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n                stylesheet = null;\n            }\n        },\n    };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n    var useStyle = styleHookSingleton();\n    var Sheet = function (_a) {\n        var styles = _a.styles, dynamic = _a.dynamic;\n        useStyle(styles, dynamic);\n        return null;\n    };\n    return Sheet;\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n    var sheet = stylesheetSingleton();\n    return function (styles, isDynamic) {\n        React.useEffect(function () {\n            sheet.add(styles);\n            return function () {\n                sheet.remove();\n            };\n        }, [styles && isDynamic]);\n    };\n};\n","export var zeroGap = {\n    left: 0,\n    top: 0,\n    right: 0,\n    gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n    var cs = window.getComputedStyle(document.body);\n    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n    return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    if (typeof window === 'undefined') {\n        return zeroGap;\n    }\n    var offsets = getOffset(gapMode);\n    var documentWidth = document.documentElement.clientWidth;\n    var windowWidth = window.innerWidth;\n    return {\n        left: offsets[0],\n        top: offsets[1],\n        right: offsets[2],\n        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n    };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    return \"\\n  .\".concat(noScrollbarsClassName, \" {\\n   overflow: hidden \").concat(important, \";\\n   padding-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  body[\").concat(lockAttribute, \"] {\\n    overflow: hidden \").concat(important, \";\\n    overscroll-behavior: contain;\\n    \").concat([\n        allowRelative && \"position: relative \".concat(important, \";\"),\n        gapMode === 'margin' &&\n            \"\\n    padding-left: \".concat(left, \"px;\\n    padding-top: \").concat(top, \"px;\\n    padding-right: \").concat(right, \"px;\\n    margin-left:0;\\n    margin-top:0;\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n    \"),\n        gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n    ]\n        .filter(Boolean)\n        .join(''), \"\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" {\\n    right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" {\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n    right: 0 \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n    margin-right: 0 \").concat(important, \";\\n  }\\n  \\n  body[\").concat(lockAttribute, \"] {\\n    \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n  }\\n\");\n};\nvar getCurrentUseCounter = function () {\n    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n    return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n    React.useEffect(function () {\n        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n        return function () {\n            var newCounter = getCurrentUseCounter() - 1;\n            if (newCounter <= 0) {\n                document.body.removeAttribute(lockAttribute);\n            }\n            else {\n                document.body.setAttribute(lockAttribute, newCounter.toString());\n            }\n        };\n    }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n    useLockAttribute();\n    /*\n     gap will be measured on every component mount\n     however it will be used only by the \"first\" invocation\n     due to singleton nature of <Style\n     */\n    var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n    return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passiveSupported = true;\n                return true;\n            },\n        });\n        // @ts-ignore\n        window.addEventListener('test', options, options);\n        // @ts-ignore\n        window.removeEventListener('test', options, options);\n    }\n    catch (err) {\n        passiveSupported = false;\n    }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n    // textarea will always _contain_ scroll inside self. It only can be hidden\n    return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n    var styles = window.getComputedStyle(node);\n    return (\n    // not-not-scrollable\n    styles[overflow] !== 'hidden' &&\n        // contains scroll inside self\n        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n    var ownerDocument = node.ownerDocument;\n    var current = node;\n    do {\n        // Skip over shadow root\n        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n            current = current.host;\n        }\n        var isScrollable = elementCouldBeScrolled(axis, current);\n        if (isScrollable) {\n            var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];\n            if (s > d) {\n                return true;\n            }\n        }\n        current = current.parentNode;\n    } while (current && current !== ownerDocument.body);\n    return false;\n};\nvar getVScrollVariables = function (_a) {\n    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n    return [\n        scrollTop,\n        scrollHeight,\n        clientHeight,\n    ];\n};\nvar getHScrollVariables = function (_a) {\n    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n    return [\n        scrollLeft,\n        scrollWidth,\n        clientWidth,\n    ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n    /**\n     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n     * and then increasingly negative as you scroll towards the end of the content.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n     */\n    return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n    var delta = directionFactor * sourceDelta;\n    // find scrollable target\n    var target = event.target;\n    var targetInLock = endTarget.contains(target);\n    var shouldCancelScroll = false;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = 0;\n    var availableScrollTop = 0;\n    do {\n        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n        var elementScroll = scroll_1 - capacity - directionFactor * position;\n        if (position || elementScroll) {\n            if (elementCouldBeScrolled(axis, target)) {\n                availableScroll += elementScroll;\n                availableScrollTop += position;\n            }\n        }\n        if (target instanceof ShadowRoot) {\n            target = target.host;\n        }\n        else {\n            target = target.parentNode;\n        }\n    } while (\n    // portaled content\n    (!targetInLock && target !== document.body) ||\n        // self content\n        (targetInLock && (endTarget.contains(target) || endTarget === target)));\n    // handle epsilon around 0 (non standard zoom levels)\n    if (isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n        shouldCancelScroll = true;\n    }\n    else if (!isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n        shouldCancelScroll = true;\n    }\n    return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n    return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n  .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n  .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n    var shouldPreventQueue = React.useRef([]);\n    var touchStartRef = React.useRef([0, 0]);\n    var activeAxis = React.useRef();\n    var id = React.useState(idCounter++)[0];\n    var Style = React.useState(styleSingleton)[0];\n    var lastProps = React.useRef(props);\n    React.useEffect(function () {\n        lastProps.current = props;\n    }, [props]);\n    React.useEffect(function () {\n        if (props.inert) {\n            document.body.classList.add(\"block-interactivity-\".concat(id));\n            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n            allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n            return function () {\n                document.body.classList.remove(\"block-interactivity-\".concat(id));\n                allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n            };\n        }\n        return;\n    }, [props.inert, props.lockRef.current, props.shards]);\n    var shouldCancelEvent = React.useCallback(function (event, parent) {\n        if ('touches' in event && event.touches.length === 2) {\n            return !lastProps.current.allowPinchZoom;\n        }\n        var touch = getTouchXY(event);\n        var touchStart = touchStartRef.current;\n        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n        var currentAxis;\n        var target = event.target;\n        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n        // allow horizontal touch move on Range inputs. They will not cause any scroll\n        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n            return false;\n        }\n        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n        if (!canBeScrolledInMainDirection) {\n            return true;\n        }\n        if (canBeScrolledInMainDirection) {\n            currentAxis = moveDirection;\n        }\n        else {\n            currentAxis = moveDirection === 'v' ? 'h' : 'v';\n            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n            // other axis might be not scrollable\n        }\n        if (!canBeScrolledInMainDirection) {\n            return false;\n        }\n        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n            activeAxis.current = currentAxis;\n        }\n        if (!currentAxis) {\n            return true;\n        }\n        var cancelingAxis = activeAxis.current || currentAxis;\n        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n    }, []);\n    var shouldPrevent = React.useCallback(function (_event) {\n        var event = _event;\n        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n            // not the last active\n            return;\n        }\n        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n        // self event, and should be canceled\n        if (sourceEvent && sourceEvent.should) {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            return;\n        }\n        // outside or shard event\n        if (!sourceEvent) {\n            var shardNodes = (lastProps.current.shards || [])\n                .map(extractRef)\n                .filter(Boolean)\n                .filter(function (node) { return node.contains(event.target); });\n            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n            if (shouldStop) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n        }\n    }, []);\n    var shouldCancel = React.useCallback(function (name, delta, target, should) {\n        var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n        shouldPreventQueue.current.push(event);\n        setTimeout(function () {\n            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n        }, 1);\n    }, []);\n    var scrollTouchStart = React.useCallback(function (event) {\n        touchStartRef.current = getTouchXY(event);\n        activeAxis.current = undefined;\n    }, []);\n    var scrollWheel = React.useCallback(function (event) {\n        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    var scrollTouchMove = React.useCallback(function (event) {\n        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    React.useEffect(function () {\n        lockStack.push(Style);\n        props.setCallbacks({\n            onScrollCapture: scrollWheel,\n            onWheelCapture: scrollWheel,\n            onTouchMoveCapture: scrollTouchMove,\n        });\n        document.addEventListener('wheel', shouldPrevent, nonPassive);\n        document.addEventListener('touchmove', shouldPrevent, nonPassive);\n        document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n        return function () {\n            lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n            document.removeEventListener('wheel', shouldPrevent, nonPassive);\n            document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n        };\n    }, []);\n    var removeScrollBar = props.removeScrollBar, inert = props.inert;\n    return (React.createElement(React.Fragment, null,\n        inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n        removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n    var shadowParent = null;\n    while (node !== null) {\n        if (node instanceof ShadowRoot) {\n            shadowParent = node.host;\n            node = node.host;\n        }\n        node = node.parentNode;\n    }\n    return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { VisuallyHidden } from '@radix-ui/react-visually-hidden';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst OPEN_KEYS = [' ', 'Enter', 'ArrowUp', 'ArrowDown'];\nconst SELECTION_KEYS = [' ', 'Enter'];\n\n/* -------------------------------------------------------------------------------------------------\n * Select\n * -----------------------------------------------------------------------------------------------*/\n\nconst SELECT_NAME = 'Select';\n\ntype ItemData = { value: string; disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n  SelectItemElement,\n  ItemData\n>(SELECT_NAME);\n\ntype ScopedProps<P> = P & { __scopeSelect?: Scope };\nconst [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n  createCollectionScope,\n  createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype SelectContextValue = {\n  trigger: SelectTriggerElement | null;\n  onTriggerChange(node: SelectTriggerElement | null): void;\n  valueNode: SelectValueElement | null;\n  onValueNodeChange(node: SelectValueElement): void;\n  valueNodeHasChildren: boolean;\n  onValueNodeHasChildrenChange(hasChildren: boolean): void;\n  contentId: string;\n  value?: string;\n  onValueChange(value: string): void;\n  open: boolean;\n  required?: boolean;\n  onOpenChange(open: boolean): void;\n  dir: SelectProps['dir'];\n  triggerPointerDownPosRef: React.MutableRefObject<{ x: number; y: number } | null>;\n  disabled?: boolean;\n};\n\nconst [SelectProvider, useSelectContext] = createSelectContext<SelectContextValue>(SELECT_NAME);\n\ntype NativeOption = React.ReactElement<React.ComponentProps<'option'>>;\n\ntype SelectNativeOptionsContextValue = {\n  onNativeOptionAdd(option: NativeOption): void;\n  onNativeOptionRemove(option: NativeOption): void;\n};\nconst [SelectNativeOptionsProvider, useSelectNativeOptionsContext] =\n  createSelectContext<SelectNativeOptionsContextValue>(SELECT_NAME);\n\ninterface SelectProps {\n  children?: React.ReactNode;\n  value?: string;\n  defaultValue?: string;\n  onValueChange?(value: string): void;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?(open: boolean): void;\n  dir?: Direction;\n  name?: string;\n  autoComplete?: string;\n  disabled?: boolean;\n  required?: boolean;\n}\n\nconst Select: React.FC<SelectProps> = (props: ScopedProps<SelectProps>) => {\n  const {\n    __scopeSelect,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    value: valueProp,\n    defaultValue,\n    onValueChange,\n    dir,\n    name,\n    autoComplete,\n    disabled,\n    required,\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n  const [trigger, setTrigger] = React.useState<SelectTriggerElement | null>(null);\n  const [valueNode, setValueNode] = React.useState<SelectValueElement | null>(null);\n  const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n  const direction = useDirection(dir);\n  const [open = false, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen,\n    onChange: onOpenChange,\n  });\n  const [value, setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n  });\n  const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null);\n\n  // We set this to true by default so that events bubble to forms without JS (SSR)\n  const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;\n  const [nativeOptionsSet, setNativeOptionsSet] = React.useState(new Set<NativeOption>());\n\n  // The native `select` only associates the correct default value if the corresponding\n  // `option` is rendered as a child **at the same time** as itself.\n  // Because it might take a few renders for our items to gather the information to build\n  // the native `option`(s), we generate a key on the `select` to make sure React re-builds it\n  // each time the options change.\n  const nativeSelectKey = Array.from(nativeOptionsSet)\n    .map((option) => option.props.value)\n    .join(';');\n\n  return (\n    <PopperPrimitive.Root {...popperScope}>\n      <SelectProvider\n        required={required}\n        scope={__scopeSelect}\n        trigger={trigger}\n        onTriggerChange={setTrigger}\n        valueNode={valueNode}\n        onValueNodeChange={setValueNode}\n        valueNodeHasChildren={valueNodeHasChildren}\n        onValueNodeHasChildrenChange={setValueNodeHasChildren}\n        contentId={useId()}\n        value={value}\n        onValueChange={setValue}\n        open={open}\n        onOpenChange={setOpen}\n        dir={direction}\n        triggerPointerDownPosRef={triggerPointerDownPosRef}\n        disabled={disabled}\n      >\n        <Collection.Provider scope={__scopeSelect}>\n          <SelectNativeOptionsProvider\n            scope={props.__scopeSelect}\n            onNativeOptionAdd={React.useCallback((option) => {\n              setNativeOptionsSet((prev) => new Set(prev).add(option));\n            }, [])}\n            onNativeOptionRemove={React.useCallback((option) => {\n              setNativeOptionsSet((prev) => {\n                const optionsSet = new Set(prev);\n                optionsSet.delete(option);\n                return optionsSet;\n              });\n            }, [])}\n          >\n            {children}\n          </SelectNativeOptionsProvider>\n        </Collection.Provider>\n\n        {isFormControl ? (\n          <BubbleSelect\n            key={nativeSelectKey}\n            aria-hidden\n            required={required}\n            tabIndex={-1}\n            name={name}\n            autoComplete={autoComplete}\n            value={value}\n            // enable form autofill\n            onChange={(event) => setValue(event.target.value)}\n            disabled={disabled}\n          >\n            {value === undefined ? <option value=\"\" /> : null}\n            {Array.from(nativeOptionsSet)}\n          </BubbleSelect>\n        ) : null}\n      </SelectProvider>\n    </PopperPrimitive.Root>\n  );\n};\n\nSelect.displayName = SELECT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'SelectTrigger';\n\ntype SelectTriggerElement = React.ElementRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SelectTriggerProps extends PrimitiveButtonProps {}\n\nconst SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>(\n  (props: ScopedProps<SelectTriggerProps>, forwardedRef) => {\n    const { __scopeSelect, disabled = false, ...triggerProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n    const isDisabled = context.disabled || disabled;\n    const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n    const getItems = useCollection(__scopeSelect);\n\n    const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.value === context.value);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem !== undefined) {\n        context.onValueChange(nextItem.value);\n      }\n    });\n\n    const handleOpen = () => {\n      if (!isDisabled) {\n        context.onOpenChange(true);\n        // reset typeahead when we open\n        resetTypeahead();\n      }\n    };\n\n    return (\n      <PopperPrimitive.Anchor asChild {...popperScope}>\n        <Primitive.button\n          type=\"button\"\n          role=\"combobox\"\n          aria-controls={context.contentId}\n          aria-expanded={context.open}\n          aria-required={context.required}\n          aria-autocomplete=\"none\"\n          dir={context.dir}\n          data-state={context.open ? 'open' : 'closed'}\n          disabled={isDisabled}\n          data-disabled={isDisabled ? '' : undefined}\n          data-placeholder={shouldShowPlaceholder(context.value) ? '' : undefined}\n          {...triggerProps}\n          ref={composedRefs}\n          // Enable compatibility with native label or custom `Label` \"click\" for Safari:\n          onClick={composeEventHandlers(triggerProps.onClick, (event) => {\n            // Whilst browsers generally have no issue focusing the trigger when clicking\n            // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n            // We force `focus` in this case. Note: this doesn't create any other side-effect\n            // because we are preventing default in `onPointerDown` so effectively\n            // this only runs for a label \"click\"\n            event.currentTarget.focus();\n          })}\n          onPointerDown={composeEventHandlers(triggerProps.onPointerDown, (event) => {\n            // prevent implicit pointer capture\n            // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n            const target = event.target as HTMLElement;\n            if (target.hasPointerCapture(event.pointerId)) {\n              target.releasePointerCapture(event.pointerId);\n            }\n\n            // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n            // but not when the control key is pressed (avoiding MacOS right click)\n            if (event.button === 0 && event.ctrlKey === false) {\n              handleOpen();\n              context.triggerPointerDownPosRef.current = {\n                x: Math.round(event.pageX),\n                y: Math.round(event.pageY),\n              };\n              // prevent trigger from stealing focus from the active item after opening.\n              event.preventDefault();\n            }\n          })}\n          onKeyDown={composeEventHandlers(triggerProps.onKeyDown, (event) => {\n            const isTypingAhead = searchRef.current !== '';\n            const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n            if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n            if (isTypingAhead && event.key === ' ') return;\n            if (OPEN_KEYS.includes(event.key)) {\n              handleOpen();\n              event.preventDefault();\n            }\n          })}\n        />\n      </PopperPrimitive.Anchor>\n    );\n  }\n);\n\nSelectTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectValue\n * -----------------------------------------------------------------------------------------------*/\n\nconst VALUE_NAME = 'SelectValue';\n\ntype SelectValueElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SelectValueProps extends Omit<PrimitiveSpanProps, 'placeholder'> {\n  placeholder?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef<SelectValueElement, SelectValueProps>(\n  (props: ScopedProps<SelectValueProps>, forwardedRef) => {\n    // We ignore `className` and `style` as this part shouldn't be styled.\n    const { __scopeSelect, className, style, children, placeholder = '', ...valueProps } = props;\n    const context = useSelectContext(VALUE_NAME, __scopeSelect);\n    const { onValueNodeHasChildrenChange } = context;\n    const hasChildren = children !== undefined;\n    const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n\n    useLayoutEffect(() => {\n      onValueNodeHasChildrenChange(hasChildren);\n    }, [onValueNodeHasChildrenChange, hasChildren]);\n\n    return (\n      <Primitive.span\n        {...valueProps}\n        ref={composedRefs}\n        // we don't want events from the portalled `SelectValue` children to bubble\n        // through the item they came from\n        style={{ pointerEvents: 'none' }}\n      >\n        {shouldShowPlaceholder(context.value) ? <>{placeholder}</> : children}\n      </Primitive.span>\n    );\n  }\n);\n\nSelectValue.displayName = VALUE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectIcon\n * -----------------------------------------------------------------------------------------------*/\n\nconst ICON_NAME = 'SelectIcon';\n\ntype SelectIconElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectIconProps extends PrimitiveSpanProps {}\n\nconst SelectIcon = React.forwardRef<SelectIconElement, SelectIconProps>(\n  (props: ScopedProps<SelectIconProps>, forwardedRef) => {\n    const { __scopeSelect, children, ...iconProps } = props;\n    return (\n      <Primitive.span aria-hidden {...iconProps} ref={forwardedRef}>\n        {children || '▼'}\n      </Primitive.span>\n    );\n  }\n);\n\nSelectIcon.displayName = ICON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'SelectPortal';\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface SelectPortalProps {\n  children?: React.ReactNode;\n  /**\n   * Specify a container element to portal the content into.\n   */\n  container?: PortalProps['container'];\n}\n\nconst SelectPortal: React.FC<SelectPortalProps> = (props: ScopedProps<SelectPortalProps>) => {\n  return <PortalPrimitive asChild {...props} />;\n};\n\nSelectPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'SelectContent';\n\ntype SelectContentElement = SelectContentImplElement;\ninterface SelectContentProps extends SelectContentImplProps {}\n\nconst SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>(\n  (props: ScopedProps<SelectContentProps>, forwardedRef) => {\n    const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n    const [fragment, setFragment] = React.useState<DocumentFragment>();\n\n    // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server\n    useLayoutEffect(() => {\n      setFragment(new DocumentFragment());\n    }, []);\n\n    if (!context.open) {\n      const frag = fragment as Element | undefined;\n      return frag\n        ? ReactDOM.createPortal(\n            <SelectContentProvider scope={props.__scopeSelect}>\n              <Collection.Slot scope={props.__scopeSelect}>\n                <div>{props.children}</div>\n              </Collection.Slot>\n            </SelectContentProvider>,\n            frag\n          )\n        : null;\n    }\n\n    return <SelectContentImpl {...props} ref={forwardedRef} />;\n  }\n);\n\nSelectContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContentImpl\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_MARGIN = 10;\n\ntype SelectContentContextValue = {\n  content?: SelectContentElement | null;\n  viewport?: SelectViewportElement | null;\n  onViewportChange?: (node: SelectViewportElement | null) => void;\n  itemRefCallback?: (node: SelectItemElement | null, value: string, disabled: boolean) => void;\n  selectedItem?: SelectItemElement | null;\n  onItemLeave?: () => void;\n  itemTextRefCallback?: (\n    node: SelectItemTextElement | null,\n    value: string,\n    disabled: boolean\n  ) => void;\n  focusSelectedItem?: () => void;\n  selectedItemText?: SelectItemTextElement | null;\n  position?: SelectContentProps['position'];\n  isPositioned?: boolean;\n  searchRef?: React.RefObject<string>;\n};\n\nconst [SelectContentProvider, useSelectContentContext] =\n  createSelectContext<SelectContentContextValue>(CONTENT_NAME);\n\nconst CONTENT_IMPL_NAME = 'SelectContentImpl';\n\ntype SelectContentImplElement = SelectPopperPositionElement | SelectItemAlignedPositionElement;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\n\ntype SelectPopperPrivateProps = { onPlaced?: PopperContentProps['onPlaced'] };\n\ninterface SelectContentImplProps\n  extends Omit<SelectPopperPositionProps, keyof SelectPopperPrivateProps>,\n    Omit<SelectItemAlignedPositionProps, keyof SelectPopperPrivateProps> {\n  /**\n   * Event handler called when auto-focusing on close.\n   * Can be prevented.\n   */\n  onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n  /**\n   * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n\n  position?: 'item-aligned' | 'popper';\n}\n\nconst SelectContentImpl = React.forwardRef<SelectContentImplElement, SelectContentImplProps>(\n  (props: ScopedProps<SelectContentImplProps>, forwardedRef) => {\n    const {\n      __scopeSelect,\n      position = 'item-aligned',\n      onCloseAutoFocus,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      //\n      // PopperContent props\n      side,\n      sideOffset,\n      align,\n      alignOffset,\n      arrowPadding,\n      collisionBoundary,\n      collisionPadding,\n      sticky,\n      hideWhenDetached,\n      avoidCollisions,\n      //\n      ...contentProps\n    } = props;\n    const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n    const [content, setContent] = React.useState<SelectContentImplElement | null>(null);\n    const [viewport, setViewport] = React.useState<SelectViewportElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [selectedItem, setSelectedItem] = React.useState<SelectItemElement | null>(null);\n    const [selectedItemText, setSelectedItemText] = React.useState<SelectItemTextElement | null>(\n      null\n    );\n    const getItems = useCollection(__scopeSelect);\n    const [isPositioned, setIsPositioned] = React.useState(false);\n    const firstValidItemFoundRef = React.useRef(false);\n\n    // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n    React.useEffect(() => {\n      if (content) return hideOthers(content);\n    }, [content]);\n\n    // Make sure the whole tree has focus guards as our `Select` may be\n    // the last element in the DOM (because of the `Portal`)\n    useFocusGuards();\n\n    const focusFirst = React.useCallback(\n      (candidates: Array<HTMLElement | null>) => {\n        const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n        const [lastItem] = restItems.slice(-1);\n\n        const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n        for (const candidate of candidates) {\n          // if focus is already where we want to go, we don't want to keep going through the candidates\n          if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n          candidate?.scrollIntoView({ block: 'nearest' });\n          // viewport might have padding so scroll to its edges when focusing first/last items.\n          if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n          if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n          candidate?.focus();\n          if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n        }\n      },\n      [getItems, viewport]\n    );\n\n    const focusSelectedItem = React.useCallback(\n      () => focusFirst([selectedItem, content]),\n      [focusFirst, selectedItem, content]\n    );\n\n    // Since this is not dependent on layout, we want to ensure this runs at the same time as\n    // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.\n    React.useEffect(() => {\n      if (isPositioned) {\n        focusSelectedItem();\n      }\n    }, [isPositioned, focusSelectedItem]);\n\n    // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n    // and close on `pointerup` outside.\n    const { onOpenChange, triggerPointerDownPosRef } = context;\n    React.useEffect(() => {\n      if (content) {\n        let pointerMoveDelta = { x: 0, y: 0 };\n\n        const handlePointerMove = (event: PointerEvent) => {\n          pointerMoveDelta = {\n            x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n            y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)),\n          };\n        };\n        const handlePointerUp = (event: PointerEvent) => {\n          // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n          if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n            event.preventDefault();\n          } else {\n            // otherwise, if the event was outside the content, close.\n            if (!content.contains(event.target as HTMLElement)) {\n              onOpenChange(false);\n            }\n          }\n          document.removeEventListener('pointermove', handlePointerMove);\n          triggerPointerDownPosRef.current = null;\n        };\n\n        if (triggerPointerDownPosRef.current !== null) {\n          document.addEventListener('pointermove', handlePointerMove);\n          document.addEventListener('pointerup', handlePointerUp, { capture: true, once: true });\n        }\n\n        return () => {\n          document.removeEventListener('pointermove', handlePointerMove);\n          document.removeEventListener('pointerup', handlePointerUp, { capture: true });\n        };\n      }\n    }, [content, onOpenChange, triggerPointerDownPosRef]);\n\n    React.useEffect(() => {\n      const close = () => onOpenChange(false);\n      window.addEventListener('blur', close);\n      window.addEventListener('resize', close);\n      return () => {\n        window.removeEventListener('blur', close);\n        window.removeEventListener('resize', close);\n      };\n    }, [onOpenChange]);\n\n    const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n      const enabledItems = getItems().filter((item) => !item.disabled);\n      const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n      const nextItem = findNextItem(enabledItems, search, currentItem);\n      if (nextItem) {\n        /**\n         * Imperative focus during keydown is risky so we prevent React's batching updates\n         * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n         */\n        setTimeout(() => (nextItem.ref.current as HTMLElement).focus());\n      }\n    });\n\n    const itemRefCallback = React.useCallback(\n      (node: SelectItemElement | null, value: string, disabled: boolean) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== undefined && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItem(node);\n          if (isFirstValidItem) firstValidItemFoundRef.current = true;\n        }\n      },\n      [context.value]\n    );\n    const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n    const itemTextRefCallback = React.useCallback(\n      (node: SelectItemTextElement | null, value: string, disabled: boolean) => {\n        const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n        const isSelectedItem = context.value !== undefined && context.value === value;\n        if (isSelectedItem || isFirstValidItem) {\n          setSelectedItemText(node);\n        }\n      },\n      [context.value]\n    );\n\n    const SelectPosition = position === 'popper' ? SelectPopperPosition : SelectItemAlignedPosition;\n\n    // Silently ignore props that are not supported by `SelectItemAlignedPosition`\n    const popperContentProps =\n      SelectPosition === SelectPopperPosition\n        ? {\n            side,\n            sideOffset,\n            align,\n            alignOffset,\n            arrowPadding,\n            collisionBoundary,\n            collisionPadding,\n            sticky,\n            hideWhenDetached,\n            avoidCollisions,\n          }\n        : {};\n\n    return (\n      <SelectContentProvider\n        scope={__scopeSelect}\n        content={content}\n        viewport={viewport}\n        onViewportChange={setViewport}\n        itemRefCallback={itemRefCallback}\n        selectedItem={selectedItem}\n        onItemLeave={handleItemLeave}\n        itemTextRefCallback={itemTextRefCallback}\n        focusSelectedItem={focusSelectedItem}\n        selectedItemText={selectedItemText}\n        position={position}\n        isPositioned={isPositioned}\n        searchRef={searchRef}\n      >\n        <RemoveScroll as={Slot} allowPinchZoom>\n          <FocusScope\n            asChild\n            // we make sure we're not trapping once it's been closed\n            // (closed !== unmounted when animating out)\n            trapped={context.open}\n            onMountAutoFocus={(event) => {\n              // we prevent open autofocus because we manually focus the selected item\n              event.preventDefault();\n            }}\n            onUnmountAutoFocus={composeEventHandlers(onCloseAutoFocus, (event) => {\n              context.trigger?.focus({ preventScroll: true });\n              event.preventDefault();\n            })}\n          >\n            <DismissableLayer\n              asChild\n              disableOutsidePointerEvents\n              onEscapeKeyDown={onEscapeKeyDown}\n              onPointerDownOutside={onPointerDownOutside}\n              // When focus is trapped, a focusout event may still happen.\n              // We make sure we don't trigger our `onDismiss` in such case.\n              onFocusOutside={(event) => event.preventDefault()}\n              onDismiss={() => context.onOpenChange(false)}\n            >\n              <SelectPosition\n                role=\"listbox\"\n                id={context.contentId}\n                data-state={context.open ? 'open' : 'closed'}\n                dir={context.dir}\n                onContextMenu={(event) => event.preventDefault()}\n                {...contentProps}\n                {...popperContentProps}\n                onPlaced={() => setIsPositioned(true)}\n                ref={composedRefs}\n                style={{\n                  // flex layout so we can place the scroll buttons properly\n                  display: 'flex',\n                  flexDirection: 'column',\n                  // reset the outline by default as the content MAY get focused\n                  outline: 'none',\n                  ...contentProps.style,\n                }}\n                onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n                  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n\n                  // select should not be navigated using tab key so we prevent it\n                  if (event.key === 'Tab') event.preventDefault();\n\n                  if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n\n                  if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n                    const items = getItems().filter((item) => !item.disabled);\n                    let candidateNodes = items.map((item) => item.ref.current!);\n\n                    if (['ArrowUp', 'End'].includes(event.key)) {\n                      candidateNodes = candidateNodes.slice().reverse();\n                    }\n                    if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n                      const currentElement = event.target as SelectItemElement;\n                      const currentIndex = candidateNodes.indexOf(currentElement);\n                      candidateNodes = candidateNodes.slice(currentIndex + 1);\n                    }\n\n                    /**\n                     * Imperative focus during keydown is risky so we prevent React's batching updates\n                     * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n                     */\n                    setTimeout(() => focusFirst(candidateNodes));\n\n                    event.preventDefault();\n                  }\n                })}\n              />\n            </DismissableLayer>\n          </FocusScope>\n        </RemoveScroll>\n      </SelectContentProvider>\n    );\n  }\n);\n\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemAlignedPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';\n\ntype SelectItemAlignedPositionElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemAlignedPositionProps extends PrimitiveDivProps, SelectPopperPrivateProps {}\n\nconst SelectItemAlignedPosition = React.forwardRef<\n  SelectItemAlignedPositionElement,\n  SelectItemAlignedPositionProps\n>((props: ScopedProps<SelectItemAlignedPositionProps>, forwardedRef) => {\n  const { __scopeSelect, onPlaced, ...popperProps } = props;\n  const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n  const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n  const [contentWrapper, setContentWrapper] = React.useState<HTMLDivElement | null>(null);\n  const [content, setContent] = React.useState<SelectItemAlignedPositionElement | null>(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n  const getItems = useCollection(__scopeSelect);\n  const shouldExpandOnScrollRef = React.useRef(false);\n  const shouldRepositionRef = React.useRef(true);\n\n  const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n  const position = React.useCallback(() => {\n    if (\n      context.trigger &&\n      context.valueNode &&\n      contentWrapper &&\n      content &&\n      viewport &&\n      selectedItem &&\n      selectedItemText\n    ) {\n      const triggerRect = context.trigger.getBoundingClientRect();\n\n      // -----------------------------------------------------------------------------------------\n      //  Horizontal positioning\n      // -----------------------------------------------------------------------------------------\n      const contentRect = content.getBoundingClientRect();\n      const valueNodeRect = context.valueNode.getBoundingClientRect();\n      const itemTextRect = selectedItemText.getBoundingClientRect();\n\n      if (context.dir !== 'rtl') {\n        const itemTextOffset = itemTextRect.left - contentRect.left;\n        const left = valueNodeRect.left - itemTextOffset;\n        const leftDelta = triggerRect.left - left;\n        const minContentWidth = triggerRect.width + leftDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const rightEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedLeft = clamp(left, [CONTENT_MARGIN, rightEdge - contentWidth]);\n\n        contentWrapper.style.minWidth = minContentWidth + 'px';\n        contentWrapper.style.left = clampedLeft + 'px';\n      } else {\n        const itemTextOffset = contentRect.right - itemTextRect.right;\n        const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n        const rightDelta = window.innerWidth - triggerRect.right - right;\n        const minContentWidth = triggerRect.width + rightDelta;\n        const contentWidth = Math.max(minContentWidth, contentRect.width);\n        const leftEdge = window.innerWidth - CONTENT_MARGIN;\n        const clampedRight = clamp(right, [CONTENT_MARGIN, leftEdge - contentWidth]);\n\n        contentWrapper.style.minWidth = minContentWidth + 'px';\n        contentWrapper.style.right = clampedRight + 'px';\n      }\n\n      // -----------------------------------------------------------------------------------------\n      // Vertical positioning\n      // -----------------------------------------------------------------------------------------\n      const items = getItems();\n      const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n      const itemsHeight = viewport.scrollHeight;\n\n      const contentStyles = window.getComputedStyle(content);\n      const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n      const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n      const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n      const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n      const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore\n      const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n\n      const viewportStyles = window.getComputedStyle(viewport);\n      const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n      const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n\n      const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n      const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n\n      const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n      const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n      const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n      const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n\n      const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n\n      if (willAlignWithoutTopOverflow) {\n        const isLastItem = selectedItem === items[items.length - 1].ref.current;\n        contentWrapper.style.bottom = 0 + 'px';\n        const viewportOffsetBottom =\n          content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n        const clampedTriggerMiddleToBottomEdge = Math.max(\n          triggerMiddleToBottomEdge,\n          selectedItemHalfHeight +\n            // viewport might have padding bottom, include it to avoid a scrollable viewport\n            (isLastItem ? viewportPaddingBottom : 0) +\n            viewportOffsetBottom +\n            contentBorderBottomWidth\n        );\n        const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n        contentWrapper.style.height = height + 'px';\n      } else {\n        const isFirstItem = selectedItem === items[0].ref.current;\n        contentWrapper.style.top = 0 + 'px';\n        const clampedTopEdgeToTriggerMiddle = Math.max(\n          topEdgeToTriggerMiddle,\n          contentBorderTopWidth +\n            viewport.offsetTop +\n            // viewport might have padding top, include it to avoid a scrollable viewport\n            (isFirstItem ? viewportPaddingTop : 0) +\n            selectedItemHalfHeight\n        );\n        const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n        contentWrapper.style.height = height + 'px';\n        viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n      }\n\n      contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n      contentWrapper.style.minHeight = minContentHeight + 'px';\n      contentWrapper.style.maxHeight = availableHeight + 'px';\n      // -----------------------------------------------------------------------------------------\n\n      onPlaced?.();\n\n      // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n      // so we explicitly turn it on only after they've registered.\n      requestAnimationFrame(() => (shouldExpandOnScrollRef.current = true));\n    }\n  }, [\n    getItems,\n    context.trigger,\n    context.valueNode,\n    contentWrapper,\n    content,\n    viewport,\n    selectedItem,\n    selectedItemText,\n    context.dir,\n    onPlaced,\n  ]);\n\n  useLayoutEffect(() => position(), [position]);\n\n  // copy z-index from content to wrapper\n  const [contentZIndex, setContentZIndex] = React.useState<string>();\n  useLayoutEffect(() => {\n    if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n  }, [content]);\n\n  // When the viewport becomes scrollable at the top, the scroll up button will mount.\n  // Because it is part of the normal flow, it will push down the viewport, thus throwing our\n  // trigger => selectedItem alignment off by the amount the viewport was pushed down.\n  // We wait for this to happen and then re-run the positining logic one more time to account for it.\n  const handleScrollButtonChange = React.useCallback(\n    (node: SelectScrollButtonImplElement | null) => {\n      if (node && shouldRepositionRef.current === true) {\n        position();\n        focusSelectedItem?.();\n        shouldRepositionRef.current = false;\n      }\n    },\n    [position, focusSelectedItem]\n  );\n\n  return (\n    <SelectViewportProvider\n      scope={__scopeSelect}\n      contentWrapper={contentWrapper}\n      shouldExpandOnScrollRef={shouldExpandOnScrollRef}\n      onScrollButtonChange={handleScrollButtonChange}\n    >\n      <div\n        ref={setContentWrapper}\n        style={{\n          display: 'flex',\n          flexDirection: 'column',\n          position: 'fixed',\n          zIndex: contentZIndex,\n        }}\n      >\n        <Primitive.div\n          {...popperProps}\n          ref={composedRefs}\n          style={{\n            // When we get the height of the content, it includes borders. If we were to set\n            // the height without having `boxSizing: 'border-box'` it would be too big.\n            boxSizing: 'border-box',\n            // We need to ensure the content doesn't get taller than the wrapper\n            maxHeight: '100%',\n            ...popperProps.style,\n          }}\n        />\n      </div>\n    </SelectViewportProvider>\n  );\n});\n\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPopperPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_POSITION_NAME = 'SelectPopperPosition';\n\ntype SelectPopperPositionElement = React.ElementRef<typeof PopperPrimitive.Content>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface SelectPopperPositionProps extends PopperContentProps, SelectPopperPrivateProps {}\n\nconst SelectPopperPosition = React.forwardRef<\n  SelectPopperPositionElement,\n  SelectPopperPositionProps\n>((props: ScopedProps<SelectPopperPositionProps>, forwardedRef) => {\n  const {\n    __scopeSelect,\n    align = 'start',\n    collisionPadding = CONTENT_MARGIN,\n    ...popperProps\n  } = props;\n  const popperScope = usePopperScope(__scopeSelect);\n\n  return (\n    <PopperPrimitive.Content\n      {...popperScope}\n      {...popperProps}\n      ref={forwardedRef}\n      align={align}\n      collisionPadding={collisionPadding}\n      style={{\n        // Ensure border-box for floating-ui calculations\n        boxSizing: 'border-box',\n        ...popperProps.style,\n        // re-namespace exposed content custom properties\n        ...{\n          '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',\n          '--radix-select-content-available-width': 'var(--radix-popper-available-width)',\n          '--radix-select-content-available-height': 'var(--radix-popper-available-height)',\n          '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',\n          '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)',\n        },\n      }}\n    />\n  );\n});\n\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectViewport\n * -----------------------------------------------------------------------------------------------*/\n\ntype SelectViewportContextValue = {\n  contentWrapper?: HTMLDivElement | null;\n  shouldExpandOnScrollRef?: React.RefObject<boolean>;\n  onScrollButtonChange?: (node: SelectScrollButtonImplElement | null) => void;\n};\n\nconst [SelectViewportProvider, useSelectViewportContext] =\n  createSelectContext<SelectViewportContextValue>(CONTENT_NAME, {});\n\nconst VIEWPORT_NAME = 'SelectViewport';\n\ntype SelectViewportElement = React.ElementRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface SelectViewportProps extends PrimitiveDivProps {\n  nonce?: string;\n}\n\nconst SelectViewport = React.forwardRef<SelectViewportElement, SelectViewportProps>(\n  (props: ScopedProps<SelectViewportProps>, forwardedRef) => {\n    const { __scopeSelect, nonce, ...viewportProps } = props;\n    const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n    const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n    const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n    const prevScrollTopRef = React.useRef(0);\n    return (\n      <>\n        {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n        <style\n          dangerouslySetInnerHTML={{\n            __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`,\n          }}\n          nonce={nonce}\n        />\n        <Collection.Slot scope={__scopeSelect}>\n          <Primitive.div\n            data-radix-select-viewport=\"\"\n            role=\"presentation\"\n            {...viewportProps}\n            ref={composedRefs}\n            style={{\n              // we use position: 'relative' here on the `viewport` so that when we call\n              // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n              // (independent of the scrollUpButton).\n              position: 'relative',\n              flex: 1,\n              overflow: 'auto',\n              ...viewportProps.style,\n            }}\n            onScroll={composeEventHandlers(viewportProps.onScroll, (event) => {\n              const viewport = event.currentTarget;\n              const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n              if (shouldExpandOnScrollRef?.current && contentWrapper) {\n                const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n                if (scrolledBy > 0) {\n                  const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n                  const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n                  const cssHeight = parseFloat(contentWrapper.style.height);\n                  const prevHeight = Math.max(cssMinHeight, cssHeight);\n\n                  if (prevHeight < availableHeight) {\n                    const nextHeight = prevHeight + scrolledBy;\n                    const clampedNextHeight = Math.min(availableHeight, nextHeight);\n                    const heightDiff = nextHeight - clampedNextHeight;\n\n                    contentWrapper.style.height = clampedNextHeight + 'px';\n                    if (contentWrapper.style.bottom === '0px') {\n                      viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n                      // ensure the content stays pinned to the bottom\n                      contentWrapper.style.justifyContent = 'flex-end';\n                    }\n                  }\n                }\n              }\n              prevScrollTopRef.current = viewport.scrollTop;\n            })}\n          />\n        </Collection.Slot>\n      </>\n    );\n  }\n);\n\nSelectViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'SelectGroup';\n\ntype SelectGroupContextValue = { id: string };\n\nconst [SelectGroupContextProvider, useSelectGroupContext] =\n  createSelectContext<SelectGroupContextValue>(GROUP_NAME);\n\ntype SelectGroupElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectGroupProps extends PrimitiveDivProps {}\n\nconst SelectGroup = React.forwardRef<SelectGroupElement, SelectGroupProps>(\n  (props: ScopedProps<SelectGroupProps>, forwardedRef) => {\n    const { __scopeSelect, ...groupProps } = props;\n    const groupId = useId();\n    return (\n      <SelectGroupContextProvider scope={__scopeSelect} id={groupId}>\n        <Primitive.div role=\"group\" aria-labelledby={groupId} {...groupProps} ref={forwardedRef} />\n      </SelectGroupContextProvider>\n    );\n  }\n);\n\nSelectGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'SelectLabel';\n\ntype SelectLabelElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectLabelProps extends PrimitiveDivProps {}\n\nconst SelectLabel = React.forwardRef<SelectLabelElement, SelectLabelProps>(\n  (props: ScopedProps<SelectLabelProps>, forwardedRef) => {\n    const { __scopeSelect, ...labelProps } = props;\n    const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n    return <Primitive.div id={groupContext.id} {...labelProps} ref={forwardedRef} />;\n  }\n);\n\nSelectLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'SelectItem';\n\ntype SelectItemContextValue = {\n  value: string;\n  disabled: boolean;\n  textId: string;\n  isSelected: boolean;\n  onItemTextChange(node: SelectItemTextElement | null): void;\n};\n\nconst [SelectItemContextProvider, useSelectItemContext] =\n  createSelectContext<SelectItemContextValue>(ITEM_NAME);\n\ntype SelectItemElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectItemProps extends PrimitiveDivProps {\n  value: string;\n  disabled?: boolean;\n  textValue?: string;\n}\n\nconst SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>(\n  (props: ScopedProps<SelectItemProps>, forwardedRef) => {\n    const {\n      __scopeSelect,\n      value,\n      disabled = false,\n      textValue: textValueProp,\n      ...itemProps\n    } = props;\n    const context = useSelectContext(ITEM_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n    const isSelected = context.value === value;\n    const [textValue, setTextValue] = React.useState(textValueProp ?? '');\n    const [isFocused, setIsFocused] = React.useState(false);\n    const composedRefs = useComposedRefs(forwardedRef, (node) =>\n      contentContext.itemRefCallback?.(node, value, disabled)\n    );\n    const textId = useId();\n\n    const handleSelect = () => {\n      if (!disabled) {\n        context.onValueChange(value);\n        context.onOpenChange(false);\n      }\n    };\n\n    if (value === '') {\n      throw new Error(\n        'A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.'\n      );\n    }\n\n    return (\n      <SelectItemContextProvider\n        scope={__scopeSelect}\n        value={value}\n        disabled={disabled}\n        textId={textId}\n        isSelected={isSelected}\n        onItemTextChange={React.useCallback((node) => {\n          setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? '').trim());\n        }, [])}\n      >\n        <Collection.ItemSlot\n          scope={__scopeSelect}\n          value={value}\n          disabled={disabled}\n          textValue={textValue}\n        >\n          <Primitive.div\n            role=\"option\"\n            aria-labelledby={textId}\n            data-highlighted={isFocused ? '' : undefined}\n            // `isFocused` caveat fixes stuttering in VoiceOver\n            aria-selected={isSelected && isFocused}\n            data-state={isSelected ? 'checked' : 'unchecked'}\n            aria-disabled={disabled || undefined}\n            data-disabled={disabled ? '' : undefined}\n            tabIndex={disabled ? undefined : -1}\n            {...itemProps}\n            ref={composedRefs}\n            onFocus={composeEventHandlers(itemProps.onFocus, () => setIsFocused(true))}\n            onBlur={composeEventHandlers(itemProps.onBlur, () => setIsFocused(false))}\n            onPointerUp={composeEventHandlers(itemProps.onPointerUp, handleSelect)}\n            onPointerMove={composeEventHandlers(itemProps.onPointerMove, (event) => {\n              if (disabled) {\n                contentContext.onItemLeave?.();\n              } else {\n                // even though safari doesn't support this option, it's acceptable\n                // as it only means it might scroll a few pixels when using the pointer.\n                event.currentTarget.focus({ preventScroll: true });\n              }\n            })}\n            onPointerLeave={composeEventHandlers(itemProps.onPointerLeave, (event) => {\n              if (event.currentTarget === document.activeElement) {\n                contentContext.onItemLeave?.();\n              }\n            })}\n            onKeyDown={composeEventHandlers(itemProps.onKeyDown, (event) => {\n              const isTypingAhead = contentContext.searchRef?.current !== '';\n              if (isTypingAhead && event.key === ' ') return;\n              if (SELECTION_KEYS.includes(event.key)) handleSelect();\n              // prevent page scroll if using the space key to select an item\n              if (event.key === ' ') event.preventDefault();\n            })}\n          />\n        </Collection.ItemSlot>\n      </SelectItemContextProvider>\n    );\n  }\n);\n\nSelectItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemText\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_TEXT_NAME = 'SelectItemText';\n\ntype SelectItemTextElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemTextProps extends PrimitiveSpanProps {}\n\nconst SelectItemText = React.forwardRef<SelectItemTextElement, SelectItemTextProps>(\n  (props: ScopedProps<SelectItemTextProps>, forwardedRef) => {\n    // We ignore `className` and `style` as this part shouldn't be styled.\n    const { __scopeSelect, className, style, ...itemTextProps } = props;\n    const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n    const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n    const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n    const [itemTextNode, setItemTextNode] = React.useState<SelectItemTextElement | null>(null);\n    const composedRefs = useComposedRefs(\n      forwardedRef,\n      (node) => setItemTextNode(node),\n      itemContext.onItemTextChange,\n      (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n    );\n\n    const textContent = itemTextNode?.textContent;\n    const nativeOption = React.useMemo(\n      () => (\n        <option key={itemContext.value} value={itemContext.value} disabled={itemContext.disabled}>\n          {textContent}\n        </option>\n      ),\n      [itemContext.disabled, itemContext.value, textContent]\n    );\n\n    const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n    useLayoutEffect(() => {\n      onNativeOptionAdd(nativeOption);\n      return () => onNativeOptionRemove(nativeOption);\n    }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n\n    return (\n      <>\n        <Primitive.span id={itemContext.textId} {...itemTextProps} ref={composedRefs} />\n\n        {/* Portal the select item text into the trigger value node */}\n        {itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren\n          ? ReactDOM.createPortal(itemTextProps.children, context.valueNode)\n          : null}\n      </>\n    );\n  }\n);\n\nSelectItemText.displayName = ITEM_TEXT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'SelectItemIndicator';\n\ntype SelectItemIndicatorElement = React.ElementRef<typeof Primitive.span>;\ninterface SelectItemIndicatorProps extends PrimitiveSpanProps {}\n\nconst SelectItemIndicator = React.forwardRef<SelectItemIndicatorElement, SelectItemIndicatorProps>(\n  (props: ScopedProps<SelectItemIndicatorProps>, forwardedRef) => {\n    const { __scopeSelect, ...itemIndicatorProps } = props;\n    const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n    return itemContext.isSelected ? (\n      <Primitive.span aria-hidden {...itemIndicatorProps} ref={forwardedRef} />\n    ) : null;\n  }\n);\n\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';\n\ntype SelectScrollUpButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollUpButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollUpButton = React.forwardRef<\n  SelectScrollUpButtonElement,\n  SelectScrollUpButtonProps\n>((props: ScopedProps<SelectScrollUpButtonProps>, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollUp, setCanScrollUp] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      const viewport = contentContext.viewport;\n      function handleScroll() {\n        const canScrollUp = viewport.scrollTop > 0;\n        setCanScrollUp(canScrollUp);\n      }\n      handleScroll();\n      viewport.addEventListener('scroll', handleScroll);\n      return () => viewport.removeEventListener('scroll', handleScroll);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n\n  return canScrollUp ? (\n    <SelectScrollButtonImpl\n      {...props}\n      ref={composedRefs}\n      onAutoScroll={() => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n        }\n      }}\n    />\n  ) : null;\n});\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';\n\ntype SelectScrollDownButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollDownButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollDownButton = React.forwardRef<\n  SelectScrollDownButtonElement,\n  SelectScrollDownButtonProps\n>((props: ScopedProps<SelectScrollDownButtonProps>, forwardedRef) => {\n  const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n  const [canScrollDown, setCanScrollDown] = React.useState(false);\n  const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n  useLayoutEffect(() => {\n    if (contentContext.viewport && contentContext.isPositioned) {\n      const viewport = contentContext.viewport;\n      function handleScroll() {\n        const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n        // we use Math.ceil here because if the UI is zoomed-in\n        // `scrollTop` is not always reported as an integer\n        const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;\n        setCanScrollDown(canScrollDown);\n      }\n      handleScroll();\n      viewport.addEventListener('scroll', handleScroll);\n      return () => viewport.removeEventListener('scroll', handleScroll);\n    }\n  }, [contentContext.viewport, contentContext.isPositioned]);\n\n  return canScrollDown ? (\n    <SelectScrollButtonImpl\n      {...props}\n      ref={composedRefs}\n      onAutoScroll={() => {\n        const { viewport, selectedItem } = contentContext;\n        if (viewport && selectedItem) {\n          viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n        }\n      }}\n    />\n  ) : null;\n});\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\n\ntype SelectScrollButtonImplElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectScrollButtonImplProps extends PrimitiveDivProps {\n  onAutoScroll(): void;\n}\n\nconst SelectScrollButtonImpl = React.forwardRef<\n  SelectScrollButtonImplElement,\n  SelectScrollButtonImplProps\n>((props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {\n  const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n  const contentContext = useSelectContentContext('SelectScrollButton', __scopeSelect);\n  const autoScrollTimerRef = React.useRef<number | null>(null);\n  const getItems = useCollection(__scopeSelect);\n\n  const clearAutoScrollTimer = React.useCallback(() => {\n    if (autoScrollTimerRef.current !== null) {\n      window.clearInterval(autoScrollTimerRef.current);\n      autoScrollTimerRef.current = null;\n    }\n  }, []);\n\n  React.useEffect(() => {\n    return () => clearAutoScrollTimer();\n  }, [clearAutoScrollTimer]);\n\n  // When the viewport becomes scrollable on either side, the relevant scroll button will mount.\n  // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)\n  // the viewport, potentially causing the active item to now be partially out of view.\n  // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.\n  useLayoutEffect(() => {\n    const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n    activeItem?.ref.current?.scrollIntoView({ block: 'nearest' });\n  }, [getItems]);\n\n  return (\n    <Primitive.div\n      aria-hidden\n      {...scrollIndicatorProps}\n      ref={forwardedRef}\n      style={{ flexShrink: 0, ...scrollIndicatorProps.style }}\n      onPointerDown={composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      })}\n      onPointerMove={composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n        contentContext.onItemLeave?.();\n        if (autoScrollTimerRef.current === null) {\n          autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n        }\n      })}\n      onPointerLeave={composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n        clearAutoScrollTimer();\n      })}\n    />\n  );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * SelectSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'SelectSeparator';\n\ntype SelectSeparatorElement = React.ElementRef<typeof Primitive.div>;\ninterface SelectSeparatorProps extends PrimitiveDivProps {}\n\nconst SelectSeparator = React.forwardRef<SelectSeparatorElement, SelectSeparatorProps>(\n  (props: ScopedProps<SelectSeparatorProps>, forwardedRef) => {\n    const { __scopeSelect, ...separatorProps } = props;\n    return <Primitive.div aria-hidden {...separatorProps} ref={forwardedRef} />;\n  }\n);\n\nSelectSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'SelectArrow';\n\ntype SelectArrowElement = React.ElementRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface SelectArrowProps extends PopperArrowProps {}\n\nconst SelectArrow = React.forwardRef<SelectArrowElement, SelectArrowProps>(\n  (props: ScopedProps<SelectArrowProps>, forwardedRef) => {\n    const { __scopeSelect, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeSelect);\n    const context = useSelectContext(ARROW_NAME, __scopeSelect);\n    const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n    return context.open && contentContext.position === 'popper' ? (\n      <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n    ) : null;\n  }\n);\n\nSelectArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction shouldShowPlaceholder(value?: string) {\n  return value === '' || value === undefined;\n}\n\nconst BubbleSelect = React.forwardRef<HTMLSelectElement, React.ComponentPropsWithoutRef<'select'>>(\n  (props, forwardedRef) => {\n    const { value, ...selectProps } = props;\n    const ref = React.useRef<HTMLSelectElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const prevValue = usePrevious(value);\n\n    // Bubble value change to parents (e.g form change event)\n    React.useEffect(() => {\n      const select = ref.current!;\n      const selectProto = window.HTMLSelectElement.prototype;\n      const descriptor = Object.getOwnPropertyDescriptor(\n        selectProto,\n        'value'\n      ) as PropertyDescriptor;\n      const setValue = descriptor.set;\n      if (prevValue !== value && setValue) {\n        const event = new Event('change', { bubbles: true });\n        setValue.call(select, value);\n        select.dispatchEvent(event);\n      }\n    }, [prevValue, value]);\n\n    /**\n     * We purposefully use a `select` here to support form autofill as much\n     * as possible.\n     *\n     * We purposefully do not add the `value` attribute here to allow the value\n     * to be set programatically and bubble to any parent form `onChange` event.\n     * Adding the `value` will cause React to consider the programatic\n     * dispatch a duplicate and it will get swallowed.\n     *\n     * We use `VisuallyHidden` rather than `display: \"none\"` because Safari autofill\n     * won't work otherwise.\n     */\n    return (\n      <VisuallyHidden asChild>\n        <select {...selectProps} ref={composedRefs} defaultValue={value} />\n      </VisuallyHidden>\n    );\n  }\n);\n\nBubbleSelect.displayName = 'BubbleSelect';\n\nfunction useTypeaheadSearch(onSearchChange: (search: string) => void) {\n  const handleSearchChange = useCallbackRef(onSearchChange);\n  const searchRef = React.useRef('');\n  const timerRef = React.useRef(0);\n\n  const handleTypeaheadSearch = React.useCallback(\n    (key: string) => {\n      const search = searchRef.current + key;\n      handleSearchChange(search);\n\n      (function updateSearch(value: string) {\n        searchRef.current = value;\n        window.clearTimeout(timerRef.current);\n        // Reset `searchRef` 1 second after it was last updated\n        if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n      })(search);\n    },\n    [handleSearchChange]\n  );\n\n  const resetTypeahead = React.useCallback(() => {\n    searchRef.current = '';\n    window.clearTimeout(timerRef.current);\n  }, []);\n\n  React.useEffect(() => {\n    return () => window.clearTimeout(timerRef.current);\n  }, []);\n\n  return [searchRef, handleTypeaheadSearch, resetTypeahead] as const;\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in a list of items,\n * the search and the current item, and returns the next item (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through items starting with that character)\n *\n * We also reorder the items by wrapping the array around the current item.\n * This is so we always look forward from the current item, and picking the first\n * item will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current item from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current item still matches.\n */\nfunction findNextItem<T extends { textValue: string }>(\n  items: T[],\n  search: string,\n  currentItem?: T\n) {\n  const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n  const normalizedSearch = isRepeated ? search[0] : search;\n  const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n  let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n  const excludeCurrentItem = normalizedSearch.length === 1;\n  if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n  const nextItem = wrappedItems.find((item) =>\n    item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n  );\n  return nextItem !== currentItem ? nextItem : undefined;\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nconst Root = Select;\nconst Trigger = SelectTrigger;\nconst Value = SelectValue;\nconst Icon = SelectIcon;\nconst Portal = SelectPortal;\nconst Content = SelectContent;\nconst Viewport = SelectViewport;\nconst Group = SelectGroup;\nconst Label = SelectLabel;\nconst Item = SelectItem;\nconst ItemText = SelectItemText;\nconst ItemIndicator = SelectItemIndicator;\nconst ScrollUpButton = SelectScrollUpButton;\nconst ScrollDownButton = SelectScrollDownButton;\nconst Separator = SelectSeparator;\nconst Arrow = SelectArrow;\n\nexport {\n  createSelectScope,\n  //\n  Select,\n  SelectTrigger,\n  SelectValue,\n  SelectIcon,\n  SelectPortal,\n  SelectContent,\n  SelectViewport,\n  SelectGroup,\n  SelectLabel,\n  SelectItem,\n  SelectItemText,\n  SelectItemIndicator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n  SelectSeparator,\n  SelectArrow,\n  //\n  Root,\n  Trigger,\n  Value,\n  Icon,\n  Portal,\n  Content,\n  Viewport,\n  Group,\n  Label,\n  Item,\n  ItemText,\n  ItemIndicator,\n  ScrollUpButton,\n  ScrollDownButton,\n  Separator,\n  Arrow,\n};\nexport type {\n  SelectProps,\n  SelectTriggerProps,\n  SelectValueProps,\n  SelectIconProps,\n  SelectPortalProps,\n  SelectContentProps,\n  SelectViewportProps,\n  SelectGroupProps,\n  SelectLabelProps,\n  SelectItemProps,\n  SelectItemTextProps,\n  SelectItemIndicatorProps,\n  SelectScrollUpButtonProps,\n  SelectScrollDownButtonProps,\n  SelectSeparatorProps,\n  SelectArrowProps,\n};\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('ChevronUp', [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]]);\n\nexport default ChevronUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('Check', [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]]);\n\nexport default Check;\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef(\n  ({ className, children, ...props }, ref) => (\n    <SelectPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"st-title-dropdown w-[180px] !h-[50px] !text-2xl md:!text-3xl inline-flex h-12 items-center justify-between border !border-none bg-new-highlighter p-2 ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 w-[200px] font-medium relative !rounded-sm shadow-[0_8px_12px_-4px_rgba(0,0,0,0.03)]\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDown className=\"h-4 w-4 self-center opacity-50\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  ),\n);\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef(\n  ({ className, ...props }, ref) => (\n    <SelectPrimitive.ScrollUpButton\n      ref={ref}\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className,\n      )}\n      {...props}\n    >\n      <ChevronUp className=\"h-4 w-4\" />\n    </SelectPrimitive.ScrollUpButton>\n  ),\n);\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef(\n  ({ className, ...props }, ref) => (\n    <SelectPrimitive.ScrollDownButton\n      ref={ref}\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className,\n      )}\n      {...props}\n    >\n      <ChevronDown className=\"h-4 w-4\" />\n    </SelectPrimitive.ScrollDownButton>\n  ),\n);\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef(\n  ({ className, children, position = \"popper\", ...props }, ref) => (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        ref={ref}\n        className={cn(\n          \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n          position === \"popper\" &&\n            \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n          className,\n        )}\n        position={position}\n        {...props}\n      >\n        <SelectScrollUpButton />\n        <SelectPrimitive.Viewport\n          className={cn(\n            \"p-1\",\n            position === \"popper\" &&\n              \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n        <SelectScrollDownButton />\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  ),\n);\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"py-1.5 pl-8 pr-2 text-4xl font-semibold\", className)}\n    {...props}\n  />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef(\n  ({ className, children, ...props }, ref) => (\n    <SelectPrimitive.Item\n      ref={ref}\n      className={cn(\n        \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <Check className=\"h-4 w-4\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  ),\n);\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n};","import React from \"react\";\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/titleselect\";\nimport { stateToAb } from \"@/data/states\";\nimport { cn } from \"@/lib/utils\";\n\nconst TitleStateSelect = ({ value, onValueChange, className = \"\" }) => {\n  return (\n    <Select value={value} onValueChange={onValueChange} className=\"\">\n      <SelectTrigger\n        className={cn(\n          \"\",\n          className,\n        )}\n      >\n        <SelectValue className=\"\" />\n      </SelectTrigger>\n      <SelectContent className=\"\">\n        {Object.entries(stateToAb).map(([state, ab], i) => (\n          <SelectItem key={i} value={ab}>\n            {state}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n\nexport default TitleStateSelect;","/* eslint-disable eqeqeq */\nimport { dates } from \"@/data/data_bar\";\nimport { abToState } from \"@/data/states\";\nimport { useContext, useMemo, useState } from \"react\";\nimport DownloadIcon from \"./DownloadIcon\";\nimport MissingData from \"./MissingData\";\nimport SlopeChart from \"./SlopeChart\";\nimport gsap from \"gsap\";\nimport { useGSAP } from \"@gsap/react\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { PageContext } from \"@/src/App\";\nimport FlowMap from \"./FlowMap\";\nimport copy from \"@/data/copy.json\";\nimport Interpolate from \"@doist/react-interpolate\";\nimport timeline from \"@/data/data_state_timeline.json\";\nimport UsMap from \"./UsMap\";\nimport ShareChartButton from \"./ShareChartButton\";\nimport DownloadDataButton from \"./DownloadDataButton\";\nimport SectionTitle from \"./SectionTitle\";\nimport SectionSubtitle from \"./SectionSubtitle\";\nimport { Separator } from \"./ui/separator\";\nimport FlowToggle from \"./FlowToggle\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport TitleStateSelect from \"./TitleStateSelect\";\n\ngsap.registerPlugin(useGSAP);\ngsap.registerPlugin(ScrollTrigger);\n\nfunction slopeCheck(hasTotalBan, state) {\n  let check = hasTotalBan ? true : state == \"US\" || state == \"DC\" ? true : false;\n  return check;\n}\n\nconst InterstateTravelSection = ({ state, setState, refMap, hasTotalBan }) => {\n  const { setActiveSection } = useContext(PageContext);\n\n  const [chartInteract, setChartInteract] = useState(false);\n  const [showOutflow, setShowOutflow] = useState(true);\n\n  const statesWithoutBans = useMemo(() => {\n    return timeline.filter((d) => d.hasTotalBan !== \"Y\").map((d) => d.state);\n  }, []);\n\n  const statesBorderBans = useMemo(() => {\n    return timeline\n      .filter(\n        (d) => d.bordersStateWithTotalBan === \"Y\" && d.hasTotalBan !== \"Y\",\n      )\n      .map((d) => d.state);\n  }, []);\n\n  const borderStates = useMemo(() => {\n    return timeline\n      .find((d) => d.state === state)\n      .borderStates.split(\", \")\n      .filter((d) => statesWithoutBans.includes(d));\n  }, [state, statesWithoutBans]);\n\n  useGSAP(\n    () => {\n      ScrollTrigger.create({\n        trigger: \"#interstate-travel\",\n        start: \"top 25%\",\n        onEnter: () => {\n          setActiveSection(\"interstate-travel\");\n        },\n        onLeaveBack: () => {\n          setActiveSection(\"the-estimates\");\n        },\n      });\n    },\n    { dependencies: [state], revertOnUpdate: true },\n  );\n\n  return (\n    <section\n      id=\"interstate-travel\"\n      ref={refMap}\n      className=\"relative border border-[#C9C9C9] px-5 py-10 bg-white rounded-[3px] m-auto mt-10 max-w-7xl\"\n    >\n      <SectionSubtitle id=\"map-headline\" state={state} className=\"scroll-mt-20\">\n        {Math.floor(dates.length / 12) + 2022}\n      </SectionSubtitle>\n      <SectionTitle>\n        <Interpolate\n          string={\n            showOutflow\n              ? copy[\"flow-map\"][0].title\n              : copy[\"flow-map\"][0].toggleTitle\n          }\n          mapping={{\n            state: <TitleStateSelect value={state} onValueChange={setState} />,\n          }}\n        />\n      </SectionTitle>\n      <div className=\"mt-10 h-[400px] w-full px-6 md:h-[500px]\">\n        <FlowMap state={state} showOutflow={showOutflow} />\n      </div>\n\n      {/* <div className=\"grid mb-10 md:hidden place-content-end\">\n        <FlowToggle\n          showOutflow={showOutflow}\n          setShowOutflow={setShowOutflow}\n        />\n      </div> */}\n\n      {/* Footer */}\n      <div className=\"flex flex-col mt-0 justify-items-end text-gray-40 sm:flex-row sm:justify-between\">\n        <div className=\"pt-4 mb-4 ml-auto md:ml-0\">\n          <FlowToggle\n            showOutflow={showOutflow}\n            setShowOutflow={setShowOutflow}\n            className=\"flex\"\n          />\n        </div>\n        <div className=\"flex gap-4 ml-auto md:ml-0\">\n          <ShareChartButton url=\"https://www.guttmacher.org/monthly-abortion-provision-study\" />\n          <DownloadDataButton url=\"https://osf.io/k4x7t/\" />\n        </div>\n      </div>\n\n      <Separator className=\"mt-14\" />\n\n      {/* Slope chart */}\n      <SectionSubtitle\n        id=\"slope-headline\"\n        state={state}\n        className=\"mt-16 scroll-mt-20\"\n      >\n        {Math.floor(dates.length / 12) + 2022}\n      </SectionSubtitle>\n      <SectionTitle>{copy[\"slope-chart\"][0].title}...</SectionTitle>\n      {/* <div className=\"w-full h-[500px] mt-10 flex gap-5\"> */}\n      {/* </div> */}\n      {/* <div className=\"flex w-full gap-5 mt-10\"> */}\n      <div id=\"slope-charts\" className=\"relative w-full gap-5 mt-10 space-y-10 md:grid md:grid-cols-3 md:space-y-0\">\n        <div className=\"absolute right-1 bottom-8\">\n          <AnimatePresence>\n            {!chartInteract && (\n              <InteractionBubble className=\"grid invisible p-2 rounded-full size-12 place-content-center sm:visible animation-wiggle\">\n                <PointIcon className=\"size-8\" />\n              </InteractionBubble>\n            )}\n          </AnimatePresence>\n        </div>\n        {slopeCheck(hasTotalBan, state) && <MissingData state={state} placement={\"slope\"}/>}\n        <div className=\"flex flex-col\">\n          <div className=\"text-wrapper h-[60px]\">\n            <div className=\"text-center font-[500] text-new-navy font-headline text-xl flex justify-center items-end h-[50px]\">\n              ...in {copy[\"slope-chart\"][0].subtitles[0].title}\n            </div>\n            <div className=\"text-xs text-center text-gray-40\">\n              <Interpolate\n                string={copy[\"slope-chart\"][0].subtitles[0].states}\n                mapping={{\n                  slopeBanCount: timeline.filter(\n                    (d) => d.hasTotalBan === \"N\" && d.state !== \"US\",\n                  ).length,\n                }}\n              />\n            </div>\n          </div>\n          <div className=\"mt-10 h-[200px]\">\n            <UsMap highlightStates={statesWithoutBans} state={state} />\n          </div>\n          <div className=\"mt-0 h-[400px] px-6\">\n            <SlopeChart state={state} includeStates={statesWithoutBans} />\n          </div>\n        </div>\n\n        <div className=\"flex flex-col\">\n          <div className=\"text-wrapper h-[60px]\">\n            <div className=\"text-center font-[500] text-new-navy font-headline text-xl flex justify-center items-end h-[50px]\">\n                ...in {copy[\"slope-chart\"][0].subtitles[1].title}\n            </div>\n            <div className=\"text-xs text-center text-gray-40\">\n              <Interpolate\n                string={copy[\"slope-chart\"][0].subtitles[1].states}\n                mapping={{\n                  slopeBorderBanCount: statesBorderBans.length,\n                }}\n              />\n            </div>\n          </div>\n          <div className=\"mt-10 h-[200px]\">\n            <UsMap highlightStates={statesBorderBans} state={state} />\n          </div>\n          <div className=\"mt-0 h-[400px] px-6\" onMouseOver={() => setChartInteract(true)}>\n            <SlopeChart\n              state={state}\n              avg=\"borderBans\"\n              includeStates={statesBorderBans}\n            />\n          </div>\n        </div>\n\n        <div className=\"flex flex-col\">\n          <div className=\"text-wrapper h-[60px]\">\n            <div className=\"text-center font-[500] text-new-navy font-headline text-xl flex justify-center items-end h-[50px]\">\n                ...in&nbsp;\n                <Interpolate\n                  string={copy[\"slope-chart\"][0].subtitles[2].title}\n                  mapping={{\n                    state: abToState[state],\n                  }}\n                />\n            </div>\n            <div className=\"text-xs text-center text-gray-40\">\n              <Interpolate\n                string={copy[\"slope-chart\"][0].subtitles[2].states}\n                mapping={{\n                  slopeBanCount: borderStates.length,\n                }}\n              />\n            </div>\n          </div>\n          <div className=\"mt-10 h-[200px]\">\n            <UsMap highlightStates={borderStates} state={state} />\n          </div>\n          <div className=\"mt-0 h-[400px] px-6\" onMouseOver={() => setChartInteract(true)}>\n            <SlopeChart\n              state={state}\n              avg=\"border\"\n              includeStates={borderStates}\n            />\n          </div>\n        </div>\n      </div>\n      <div className=\"flex mt-10 text-gray-40\">\n        <div className=\"flex gap-4 ml-auto\">\n          <ShareChartButton url=\"https://www.guttmacher.org/monthly-abortion-provision-study\" />\n          <DownloadDataButton url=\"https://osf.io/k4x7t/\" />\n        </div>\n      </div>\n    </section>\n  );\n};\n\nfunction HighlightedTitle({ children }) {\n  return (\n    <div className=\"inline-block bg-new-highlighter px-[4px]\">{children}</div>\n  );\n}\n\nexport default InterstateTravelSection;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Cross\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTEgMmEyIDIgMCAwIDAtMiAydjVINGEyIDIgMCAwIDAtMiAydjJjMCAxLjEuOSAyIDIgMmg1djVjMCAxLjEuOSAyIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTVoNWEyIDIgMCAwIDAgMi0ydi0yYTIgMiAwIDAgMC0yLTJoLTVWNGEyIDIgMCAwIDAtMi0yaC0yeiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/cross\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cross = createLucideIcon('Cross', [\n  [\n    'path',\n    {\n      d: 'M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z',\n      key: '1t5g7j',\n    },\n  ],\n]);\n\nexport default Cross;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowBigUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxOHYtNkg1bDctNyA3IDdoLTR2Nkg5eiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-big-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowBigUp = createLucideIcon('ArrowBigUp', [\n  ['path', { d: 'M9 18v-6H5l7-7 7 7h-4v6H9z', key: '1x06kx' }],\n]);\n\nexport default ArrowBigUp;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ArrowBigDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgNnY2aDRsLTcgNy03LTdoNFY2aDZ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/arrow-big-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowBigDown = createLucideIcon('ArrowBigDown', [\n  ['path', { d: 'M15 6v6h4l-7 7-7-7h4V6h6z', key: '1thax2' }],\n]);\n\nexport default ArrowBigDown;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Link\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTNhNSA1IDAgMCAwIDcuNTQuNTRsMy0zYTUgNSAwIDAgMC03LjA3LTcuMDdsLTEuNzIgMS43MSIgLz4KICA8cGF0aCBkPSJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Link = createLucideIcon('Link', [\n  ['path', { d: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71', key: '1cjeqo' }],\n  ['path', { d: 'M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71', key: '19qd67' }],\n]);\n\nexport default Link;\n","import { Link } from \"lucide-react\";\n\nconst MetricCard = ({ icon, value, text, link, jsx, linkText }) => {\n  return (\n    <div className=\"border-[3px] border-new-navy w-[160px] px-5 py-6 relative flex flex-col gap-2 items-center bg-white rounded-[3px] sm:w-[200px]\">\n      {/* Icon */}\n      <div className=\"size-[40px] rounded-full bg-new-highlighter grid place-content-center absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 border-white border-[3px]\">\n        {icon}\n      </div>\n      {/* Value */}\n      <div className=\"text-[#E66A18] text-4xl font-bold font-headline tracking-wide sm:text-5xl\">\n        {value}\n      </div>\n      {/* Text */}\n      {jsx && <div className=\"text-sm text-center leading-[18px]\">{jsx}</div>}\n      {text && (\n        <div\n          className=\"text-sm text-center leading-[18px]\"\n          {...(text ? { dangerouslySetInnerHTML: { __html: text } } : {})} />\n      )}\n      {/* Link */}\n      {linkText && (\n        <a\n          href={link}\n          target=\"_blank\"\n          rel=\"noreferrer noopener\"\n          className=\"st-metric-link inline-block absolute bottom-0 left-1/2 -translate-x-1/2 text-xs min-w-max bg-[#F0F1FD] border-white border-[2px] font-medium text-new-navy px-3 py-1 rounded-full translate-y-1/2 no-underline hover:underline hover:bg-new-violet-blue hover:text-white\"\n        >\n          <div className=\"flex gap-1 px-1 py-1 items-center font-medium\">\n            {linkText}\n            <Link className=\"size-3\" />\n          </div>\n        </a>\n      )}\n    </div>\n  );\n};\n\nexport default MetricCard;\n","import React from \"react\";\n\nconst UsIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"31\"\n      height=\"20\"\n      viewBox=\"0 0 31 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <path\n        d=\"M30.7546 2.88188C30.6933 2.82055 30.632 2.75922 30.54 2.69789C30.448 2.63656 30.356 2.57523 30.2947 2.5139C30.2027 2.36058 30.1107 2.17659 30.0493 2.02326L29.988 1.9006C29.896 1.68595 29.804 1.47129 29.4667 1.56329C29.436 1.56329 29.4054 1.59395 29.4054 1.62462C29.344 1.65528 29.344 1.68595 29.2827 1.65528C29.2521 1.62462 29.1601 1.59395 29.0681 1.65528C28.9147 1.74728 28.9147 2.42191 28.9147 2.42191C28.8841 2.54457 28.8841 2.66723 28.8841 2.78989C28.8841 2.97388 28.8841 3.1272 28.7921 3.28053C28.6081 3.7405 28.1788 3.8325 27.7188 3.95516C27.2588 4.07782 26.7989 4.20048 26.5535 4.66045C26.4615 4.81378 26.4615 4.9671 26.4309 5.12043C26.4002 5.33508 26.4002 5.51908 26.1242 5.64174C26.0322 5.6724 25.9096 5.70306 25.7869 5.70306C25.4803 5.73373 25.1123 5.7644 25.1123 6.10171C25.1123 6.16304 25.1429 6.22437 25.1429 6.25504C25.1736 6.2857 25.1736 6.31637 25.1429 6.34703C25.1123 6.40836 25.0203 6.46969 24.959 6.53102C24.9283 6.56169 24.8976 6.59235 24.8976 6.59235C24.7443 6.74568 24.5603 6.899 24.3763 7.05233C23.763 7.5123 23.3644 7.63496 23.1804 7.42031C23.1497 7.38964 23.1191 7.26698 23.2724 6.96033C23.303 6.92967 23.3337 6.86834 23.3644 6.86834C23.4564 6.77634 23.487 6.68434 23.4564 6.46969L23.4257 6.40836C23.3337 6.04038 23.2724 5.82573 23.1497 5.76439C22.9351 5.64174 22.8124 5.82573 22.7511 5.91772C22.7204 5.97905 22.6897 6.04038 22.6591 6.00971C22.6284 6.00971 22.6284 6.00971 22.6284 6.00971C22.6284 5.97905 22.6591 5.91772 22.6591 5.88706C22.6897 5.85639 22.6897 5.79506 22.6897 5.79506C22.7817 5.58041 22.8737 5.27376 22.7204 5.02844C22.6284 4.84445 22.3831 4.75245 22.1991 4.69112L22.1378 4.66045C21.8311 4.59912 21.8005 4.59912 21.6471 4.84444L21.6165 4.90577C21.5858 4.9671 21.5551 4.99777 21.5245 5.08976V5.12043C21.5245 5.15109 21.5245 5.18176 21.5245 5.21242C21.5245 5.24309 21.5245 5.24309 21.5245 5.27376C21.4938 5.24309 21.4325 5.21242 21.3711 5.24309C21.2178 5.33508 21.1872 5.48841 21.1565 5.64174C21.0952 5.94839 21.0952 6.2857 21.1872 6.53102L21.2178 6.62301C21.3098 6.86834 21.3405 7.05233 21.2792 7.29765C21.2178 7.48164 21.0338 7.75762 20.9112 7.72696C20.8498 7.72696 20.7272 7.66563 20.6352 7.17499C20.5432 6.74568 20.6045 6.3777 20.6965 5.94839C20.7272 5.70307 20.7885 5.48841 20.7885 5.21242C20.7885 5.18176 20.7578 5.15109 20.7578 5.15109C20.7272 5.15109 20.6965 5.15109 20.6658 5.18176C20.6045 5.24309 20.5739 5.30442 20.5125 5.36575C20.4819 5.42708 20.4512 5.48841 20.3899 5.51907C20.4512 5.30442 20.6658 4.99777 20.8192 4.84444C20.9725 4.84444 21.0952 4.75245 21.2178 4.69112C21.3098 4.62979 21.4325 4.53779 21.5245 4.53779C21.5551 4.53779 21.5858 4.56846 21.6165 4.56846C21.6778 4.59912 21.7391 4.62979 21.8005 4.62979C21.8311 4.62979 21.8925 4.56846 21.8925 4.53779C21.9538 4.53779 21.9844 4.53779 22.0151 4.50713C22.0458 4.50713 22.0764 4.50713 22.1378 4.50713C22.1684 4.50713 22.1991 4.47646 22.1991 4.47646C22.1991 4.4458 22.1991 4.41513 22.1991 4.38447C22.0458 4.16981 21.8924 4.07782 21.6778 4.01649C21.6471 3.98582 21.6165 3.92449 21.5245 3.92449C21.4938 3.92449 21.4631 3.92449 21.4018 3.95516C21.3098 3.95516 21.1872 4.01649 21.0952 4.07782C21.0338 4.10848 20.9725 4.13915 20.9112 4.16981C20.7272 4.23114 20.6045 4.20048 20.4819 4.10848C20.4205 4.07782 20.3285 4.04715 20.2365 4.01649C20.2059 3.98582 20.1445 3.98582 20.1139 3.98582C20.0832 3.98582 20.0525 3.98582 20.0525 3.98582C20.0525 3.95516 20.1139 3.89383 20.1445 3.8325C20.1752 3.80183 20.2059 3.7405 20.2365 3.70984C20.2365 3.67917 20.2365 3.64851 20.2365 3.61784C20.2365 3.52585 20.2059 3.49518 20.2059 3.52585C19.9912 3.55651 19.7766 3.7405 19.5926 3.89383C19.4699 3.98582 19.3779 4.07782 19.2859 4.10848C19.0406 4.23114 18.9793 4.23114 18.9486 4.20048C18.9179 4.20048 18.9179 4.13915 18.9179 4.04715C18.9179 4.01649 18.9179 3.98582 18.8873 3.98582C18.8566 3.95516 18.8259 3.95516 18.7953 3.98582C18.6726 4.07782 18.55 4.13915 18.4273 4.16981C18.55 3.89383 18.8259 3.70984 19.1019 3.55651C19.1939 3.49518 19.2553 3.43385 19.3473 3.40319C19.3779 3.37252 19.3779 3.37252 19.3779 3.34186C19.3779 3.31119 19.3473 3.28053 19.3473 3.28053C19.1633 3.15787 18.9793 3.18853 18.7953 3.18853C18.7033 3.18853 18.6113 3.2192 18.4886 3.18853C18.3353 3.18853 18.2126 3.09654 18.0593 3.03521C17.906 2.97388 17.7527 2.88188 17.5993 2.88188C17.538 2.88188 17.4767 2.88188 17.4154 2.85122C17.3234 2.85122 17.2314 2.85122 17.1087 2.78989C17.0167 2.72856 17.0167 2.72856 16.986 2.66723C16.9554 2.63656 16.9554 2.57523 16.8941 2.54457C16.8327 2.45257 16.7714 2.39124 16.7101 2.42191C16.6487 2.42191 16.6181 2.48324 16.6181 2.5139C16.5874 2.54457 16.5567 2.6059 16.4954 2.63656C16.4341 2.66723 16.2808 2.66723 16.1581 2.63656C16.0968 2.63656 16.0354 2.63656 15.9741 2.63656L15.3301 2.6059C14.8702 2.57523 14.4409 2.54457 14.0115 2.5139C13.2143 2.48324 12.3556 2.39124 11.497 2.29925C9.68778 2.05393 8.06253 1.74728 6.49861 1.31797C5.91598 1.16464 5.36401 0.980653 4.81204 0.796663C4.56672 0.704668 4.3214 0.643338 4.07608 0.582008C4.04541 0.582008 4.01475 0.551343 3.98408 0.551343C3.86142 0.490013 3.80009 0.520678 3.7081 0.674004C3.67743 0.765999 3.67743 0.888658 3.67743 1.04198C3.67743 1.13398 3.67743 1.22597 3.67743 1.2873C3.67743 1.34863 3.64677 1.3793 3.64677 1.44063L3.6161 1.40996C3.58544 1.40996 3.58544 1.3793 3.55477 1.3793C3.58544 1.34863 3.6161 1.2873 3.6161 1.22597C3.6161 1.13398 3.55477 1.07265 3.43211 0.980654L3.37078 0.919323C3.18679 0.765998 2.97214 0.612673 2.81881 0.643338C2.75748 0.643338 2.72682 0.674003 2.69615 0.735333C2.66549 0.796663 2.66549 0.919323 2.66549 1.19531C2.66549 1.2873 2.63482 1.3793 2.63482 1.47129C2.63482 1.59395 2.63482 1.71661 2.60416 1.83927C2.60416 1.9006 2.57349 1.96193 2.57349 1.9926C2.54283 2.14592 2.54283 2.20725 2.63482 2.29925C2.42017 2.42191 2.32817 2.63656 2.26684 2.85122C2.23618 2.91255 2.20551 3.00454 2.17485 3.06587C2.02152 3.43385 1.83753 3.7405 1.59221 4.16981C1.40822 4.47646 1.34689 4.81378 1.31623 5.12043C1.2549 5.51907 1.19357 5.88705 0.917582 6.16304C0.917582 6.16304 0.886917 6.19371 0.886917 6.22437V6.2857C0.886917 6.31637 0.886917 6.31636 0.886917 6.31636C1.07091 6.59235 0.948247 6.92967 0.794922 7.29765V7.32831C0.825587 7.6043 0.886917 8.15627 1.1629 8.34026C0.948247 8.55491 1.07091 8.76957 1.1629 8.98422C1.22423 9.07622 1.2549 9.16821 1.2549 9.26021C1.2549 9.26021 1.22423 9.29087 1.22423 9.32154C1.19357 9.3522 1.1629 9.41353 1.1629 9.4442C1.1629 9.50553 1.22423 9.62819 1.2549 9.72018C1.28556 9.81218 1.31623 9.90417 1.37756 10.0268C1.43889 10.2108 1.53088 10.3948 1.53088 10.5788C1.53088 10.6095 1.53088 10.6401 1.53088 10.7015C1.53088 10.7935 1.50022 10.9161 1.56155 11.0388C1.62288 11.1001 1.71487 11.1614 1.83753 11.1921C1.89886 11.2228 1.96019 11.2534 1.99086 11.2841C2.20551 11.4374 2.3895 11.6214 2.57349 11.8054C2.69615 11.9281 2.78815 12.0201 2.91081 12.1427C3.06413 12.2654 3.12546 12.388 3.15613 12.5414C3.15613 12.572 3.15613 12.6027 3.15613 12.664C3.15613 12.756 3.15613 12.848 3.21746 12.94C3.37078 13.1547 3.73876 13.1853 4.04541 13.216C4.2294 13.216 4.38273 13.2467 4.47472 13.2773C4.59738 13.308 4.72004 13.4306 4.8427 13.5226C4.87337 13.5533 4.90403 13.584 4.9347 13.6146C5.05736 13.7066 5.21068 13.7986 5.36401 13.8906C5.456 13.952 5.548 14.0133 5.63999 14.0439C5.70132 14.1053 5.79332 14.1359 5.85465 14.1973C6.22263 14.4426 6.59061 14.6879 7.01992 14.7799C7.11191 14.7799 7.23457 14.8106 7.32657 14.8106C7.41856 14.8412 7.54122 14.8412 7.63322 14.8719C7.69455 14.8719 7.75588 14.9026 7.81721 14.9332C8.0012 14.9946 8.24652 15.0559 8.39984 14.9946C8.5225 14.9639 8.58383 14.9026 8.6145 14.8412C8.64516 14.8106 8.67583 14.7799 8.70649 14.7492C8.82915 14.7186 9.1358 14.7492 9.31979 14.7799L9.41179 14.8106C9.65711 14.8412 9.87176 15.1172 10.0558 15.3319C10.1171 15.3932 10.1784 15.4852 10.2397 15.5465C10.3624 15.6999 10.4237 15.8532 10.4851 16.0372C10.5771 16.2518 10.6384 16.4358 10.8224 16.6198C11.3437 17.0798 11.6503 16.9571 11.8037 16.8038C12.0796 16.4971 12.233 16.4052 12.5703 16.5891C12.9383 16.7731 13.0916 17.0185 13.2449 17.3864C13.3062 17.5398 13.4289 17.6624 13.5209 17.8157C13.6742 18.0304 13.7969 18.2144 13.8582 18.4597C13.9502 18.9503 14.3795 19.1343 14.7782 19.2877C14.8395 19.3183 14.8702 19.3183 14.9315 19.349L14.9928 19.3797C15.0542 19.4103 15.1155 19.441 15.1768 19.441C15.2075 19.441 15.2075 19.441 15.2381 19.4103C15.2995 19.3797 15.3301 19.3183 15.3301 19.2263C15.3608 19.1037 15.2995 18.9503 15.2381 18.797C15.1768 18.6744 15.1461 18.521 15.1768 18.4597C15.1768 18.429 15.2075 18.429 15.2075 18.3984C15.2381 18.3677 15.2688 18.3064 15.2995 18.2451C15.3301 18.1837 15.2995 18.1224 15.2995 18.0917V18.0611C15.2995 18.0304 15.3301 18.0304 15.3608 18.0304C15.3915 18.0304 15.4528 18.0304 15.4835 17.9691C15.5141 17.9384 15.5448 17.8771 15.5448 17.8157C15.5755 17.7851 15.6368 17.7544 15.6368 17.7544H15.6675C15.6981 17.7544 15.7288 17.7237 15.7594 17.7237C15.8208 17.6931 15.9128 17.6931 15.9128 17.6011C15.9128 17.5704 15.9128 17.5398 15.9128 17.5091C15.9741 17.4784 16.0661 17.4784 16.1274 17.4784C16.2808 17.4478 16.4647 17.4171 16.6181 17.2638C16.7407 17.1718 16.8021 17.0185 16.8327 16.8958C16.8634 16.8345 16.8634 16.8038 16.8941 16.7425C17.078 16.8345 17.3234 16.8038 17.5687 16.7425C17.722 16.7118 17.8753 16.6811 17.998 16.7118C18.3966 16.8038 18.6113 16.8038 18.7033 16.7425C18.7033 16.7425 18.734 16.7118 18.734 16.6811C18.8566 16.6811 18.8873 16.7425 19.0099 16.8345C19.0406 16.8651 19.0713 16.8958 19.1019 16.9265C19.2859 17.0798 19.3779 17.0798 19.5926 17.0491C19.6539 17.0491 19.6846 17.0185 19.7152 17.0185H19.7459C19.7459 17.0185 19.7459 17.0185 19.7766 17.0491C19.8072 17.0798 19.8379 17.1104 19.8992 17.1104C19.9299 17.1104 19.9299 17.1104 19.9606 17.0798C19.9912 17.0491 20.0219 16.9878 20.0219 16.9265C20.0219 16.8958 20.0219 16.8958 20.0525 16.8651C20.0832 16.8651 20.1139 16.8958 20.1445 16.9265C20.3592 17.0798 20.5125 17.1411 20.6045 17.0798C20.6352 17.0491 20.6658 16.9878 20.6352 16.9265C20.6045 16.8345 20.5125 16.8038 20.4205 16.7731C20.3899 16.7731 20.3285 16.7425 20.3285 16.7118C20.3285 16.7118 20.3592 16.6505 20.3899 16.6198C20.4205 16.5585 20.4819 16.4971 20.4819 16.4052C20.4819 16.3745 20.4819 16.3745 20.4512 16.3438C20.4205 16.3438 20.4205 16.3132 20.3899 16.3132C20.2059 16.3438 20.0525 16.3438 19.9299 16.2825C19.9606 16.2825 19.9606 16.2825 20.0219 16.2825C20.0525 16.2825 20.1139 16.3132 20.1752 16.3132C20.3899 16.3132 20.5125 16.2825 20.6658 16.2212C20.7272 16.1905 20.8192 16.1905 20.8805 16.1598C21.0338 16.1292 21.1872 16.0985 21.3098 15.9452C21.3711 16.0372 21.4325 16.1292 21.5858 16.1292C21.6471 16.1292 21.7391 16.0678 21.8311 16.0372C21.8618 16.0065 21.9231 15.9758 21.9538 15.9758C21.9538 15.7919 22.0764 15.7919 22.1684 15.7919C22.3831 15.7919 22.5057 15.7919 22.6897 15.9145C22.7511 15.9452 22.7817 16.0065 22.8431 16.0372C22.9351 16.0985 22.9964 16.1905 23.1497 16.1905C23.303 16.1905 23.4257 16.0985 23.5177 16.0065C23.579 15.9452 23.6404 15.8838 23.7324 15.8838C23.855 15.8532 23.947 15.9145 24.0697 16.0678C24.1003 16.0985 24.131 16.1292 24.1923 16.1598C24.2537 16.1905 24.2843 16.2212 24.3456 16.2518C24.499 16.3438 24.6523 16.4358 24.683 16.6505C24.7136 16.7425 24.7136 16.8345 24.7136 16.9265C24.7136 17.0491 24.7136 17.2024 24.775 17.3251C24.775 17.3558 24.8056 17.3558 24.8363 17.3864C24.867 17.3864 24.8976 17.3864 24.8976 17.3558C24.8976 17.3251 24.9283 17.3251 24.9283 17.2944C24.9283 17.3251 24.9283 17.3558 24.9283 17.3864C24.9283 17.4784 24.8976 17.6011 24.959 17.7544C25.0203 17.8464 25.1123 17.9077 25.1736 17.9691C25.2349 18.0304 25.2963 18.0611 25.3576 18.1224C25.3883 18.1837 25.4496 18.2144 25.4803 18.2757C25.5723 18.3984 25.6642 18.521 25.7869 18.613C25.8176 18.6437 25.8482 18.6744 25.9096 18.705C25.9402 18.7357 25.9709 18.7664 26.0016 18.797C26.0016 18.797 26.0016 18.8277 26.0322 18.8584C26.0629 18.9503 26.0936 19.0423 26.1549 19.073C26.3082 19.1343 26.4309 19.1037 26.4922 19.073C26.6762 18.9503 26.7989 18.5517 26.7989 17.9384C26.7989 17.6318 26.6149 17.3558 26.4309 17.1104C26.3389 16.9878 26.2775 16.8958 26.2162 16.7731C26.2469 16.7425 26.2469 16.7425 26.2469 16.7118C26.2162 16.4971 26.0629 16.2825 25.9402 16.0985C25.8789 16.0065 25.8176 15.9452 25.7869 15.8838C25.6029 15.6079 25.5109 15.3932 25.4803 15.1786C25.3883 14.6572 25.6029 14.0746 26.0016 13.7066C26.1856 13.5533 26.2775 13.3387 26.4002 13.1547C26.5229 12.9093 26.6762 12.6947 26.8908 12.5414C27.1055 12.4187 27.1975 12.296 27.2895 12.1427C27.3202 12.1121 27.3508 12.0507 27.3815 12.0201C27.4735 11.9281 27.5655 11.8667 27.6575 11.8054C27.7801 11.7441 27.8721 11.6521 27.9641 11.5294C27.9948 11.4988 27.9948 11.4681 27.9641 11.4374C27.9335 11.3761 27.8721 11.4068 27.8108 11.4068C27.8415 11.3454 27.8415 11.2841 27.8108 11.1921C27.9335 11.1614 28.0561 11.1614 28.1481 10.9468C28.1788 10.8241 28.1788 10.7628 28.1481 10.7015C28.0255 10.5788 27.9641 10.5788 27.8721 10.5788C27.9948 10.4561 28.0561 10.2722 27.8721 10.0882C27.7801 9.99617 27.6881 9.9655 27.5961 9.93484H27.5655C27.6268 9.84284 27.5655 9.75085 27.5041 9.62819C27.4735 9.59752 27.4428 9.53619 27.4428 9.50553C27.4735 9.50553 27.4735 9.47486 27.5041 9.4442C27.5041 9.38287 27.4735 9.3522 27.4428 9.29087C27.4428 9.26021 27.4122 9.26021 27.3815 9.22954C27.4122 9.19888 27.4122 9.16821 27.3815 9.13755L27.3508 9.04555C27.3508 9.01489 27.3202 8.98422 27.3202 8.98422C27.3508 9.01489 27.3815 9.07622 27.4122 9.10688C27.4428 9.13755 27.4735 9.16821 27.4735 9.16821C27.5348 9.22954 27.5655 9.26021 27.5961 9.3522C27.5961 9.41353 27.5961 9.47486 27.5961 9.56686C27.5961 9.62819 27.5961 9.72018 27.6268 9.78151C27.6268 9.81218 27.6575 9.84284 27.6881 9.84284C27.7188 9.84284 27.7495 9.81218 27.7801 9.78151C27.8108 9.72018 27.8108 9.65885 27.8415 9.62819C27.9335 9.38287 28.0255 9.07622 28.0255 8.86156C28.0255 8.67757 27.9335 8.55491 27.8415 8.43225C27.8108 8.40159 27.7801 8.37092 27.7801 8.34026C27.8721 8.40159 27.9641 8.46292 28.0868 8.37092C28.2094 8.27893 28.3321 7.72696 28.3321 7.6043C28.3321 7.57363 28.3321 7.54297 28.3321 7.5123C28.3321 7.45097 28.3321 7.38964 28.3321 7.32831C28.3014 7.26698 28.2401 7.23632 28.1788 7.20565L28.1481 7.17499C28.1174 7.08299 28.1788 7.02166 28.3014 6.899L28.3321 6.86834C28.5161 6.68435 28.7001 6.56169 28.8841 6.46969C28.9454 6.43902 29.0067 6.40836 29.0374 6.3777C29.1294 6.34703 29.2521 6.2857 29.3134 6.19371C29.344 6.16304 29.3747 6.10171 29.3747 6.07104V6.04038C29.4054 6.07105 29.4667 6.10171 29.4974 6.07104C29.62 6.04038 29.9573 5.88706 30.0493 5.73373C30.08 5.70307 30.08 5.6724 30.0493 5.64174C30.0187 5.61107 29.988 5.61107 29.9573 5.61107C29.804 5.64174 29.6814 5.64173 29.5894 5.54974C29.4667 5.42708 29.4054 5.21243 29.436 4.87511C29.436 4.84445 29.436 4.81378 29.436 4.78311C29.4667 4.59912 29.4667 4.4458 29.5894 4.32314C29.62 4.29247 29.6507 4.26181 29.712 4.23114C29.7734 4.20048 29.804 4.13915 29.8347 4.07782C29.8347 4.07782 29.8347 4.07782 29.8347 4.04715C29.8347 4.01649 29.8654 3.98582 29.8654 3.92449C29.8654 3.86316 29.896 3.80183 29.9267 3.77117C29.9573 3.70984 30.08 3.64851 30.172 3.58718C30.4173 3.46452 30.6626 3.31119 30.6933 3.09654C30.816 3.00454 30.816 2.94321 30.7546 2.88188Z\"\n        fill=\"#1E1C6F\"\n      />\n    </svg>\n  );\n};\n\nexport default UsIcon;\n","const PointIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"28\"\n      height=\"28\"\n      viewBox=\"0 0 64 64\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <path\n        d=\"M20.09,50.35L0,30.26l7.47-7.64,20.27,20.09-7.64,7.64ZM42.67,27.77L22.58,7.51,30.22.04l20.09,20.09-7.64,7.64ZM59.02,64.04L12.62,17.64l4.98-4.98,46.4,46.4-4.98,4.98Z\"\n        fill=\"#1E1C6F\"\n      />\n    </svg>\n  );\n};\n\nexport default PointIcon;\n","const PointIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"28\"\n      height=\"28\"\n      viewBox=\"0 0 64 64\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <path\n        d=\"M54.6,54.6c11.8-11.8,12.5-30.5,2-43L11.6,56.6c12.6,10.4,31.3,9.8,43-2Z\"\n        fill=\"#1E1C6F\"\n      />\n      <path \n        d=\"M9.4,9.4C-2.4,21.2-3.1,39.8,7.4,52.4L52.4,7.4C39.8-3.1,21.2-2.4,9.4,9.4Z\"\n        fill=\"#1E1C6F\"\n      />\n    </svg>\n  );\n};\n\nexport default PointIcon;\n","export default async function fetchLiveData() {\n  let policyData = [];\n  let legislationData = [];\n\n  // Gets the json from the URL, saves as response and then loops through the data to get what we need\n  async function getJSON(url, dataType) {\n    try {\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n\n      const data = await response.json();\n      loopData(data, dataType);\n    } catch (error) {\n      console.error(\"Error fetching and downloading JSON:\", error);\n    }\n  }\n\n  // Loops through the data and structures it the way we need it\n  function loopData(data, dataType) {\n    if (dataType === \"policy\") {\n      policyData = data.entries.map((d, i) => ({\n        state: d.state,\n        policy: d.environment_type,\n      }));\n    } else {\n      legislationData = countStates(data.rows);\n    }\n  }\n\n  // Counts up unique states\n  function countStates(data) {\n    const stateCount = {};\n    let totalCount = 0;\n\n    data.forEach((d) => {\n      const state = d.value.state;\n      if (stateCount[state]) {\n        stateCount[state]++;\n      } else {\n        stateCount[state] = 1;\n      }\n      totalCount++;\n    });\n\n    stateCount[\"US\"] = totalCount;\n    return stateCount;\n  }\n\n  // Calls the functions!!\n  await getJSON(\n    \"https://states.guttmacher.org/policies/admin/api/collections/get/states/?populate=1\",\n    \"policy\"\n  );\n  await getJSON(\n    \"https://couchdb.guttmacher.org/guttmacher/_design/policy_updates/_view/year_topic?startkey=%5B2023%2C%22Abortion%22%5D&endkey=%5B2024%2C%22Abortion%22%2C%7B%7D%5D\",\n    \"legislation\"\n  );\n\n  return { policyData, legislationData };\n}\n","import { ArrowBigDown, ArrowBigUp, Cross } from \"lucide-react\";\nimport MetricCard from \"./MetricCard\";\nimport UsIcon from \"./UsIcon\";\nimport GavelIcon from \"./GavelIcon\";\nimport PillIcon from \"./PillIcon\";\nimport { useContext, useEffect, useMemo, useState } from \"react\";\nimport { DataContext, PageContext } from \"@/src/App\";\nimport gsap from \"gsap\";\nimport { useGSAP } from \"@gsap/react\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport copy from \"@/data/copy.json\";\nimport { abToState, statesWithTotalBan, stateToAb } from \"@/data/states\";\nimport dataChange from \"@/data/data_change.json\";\nimport { group } from \"d3-array\";\nimport Interpolate from \"@doist/react-interpolate\";\nimport fetchLiveData from \"@/lib/fetchLiveData\";\n\nconst callouts = copy.callouts;\n\ngsap.registerPlugin(useGSAP);\ngsap.registerPlugin(ScrollTrigger);\n\nconst MetricsSection = ({ state }) => {\n  const { setActiveSection } = useContext(PageContext);\n  const { totalAbortions2023, numStatesTotalAbortionBan } =\n    useContext(DataContext);\n\n  const [legislationData, setLegislationData] = useState();\n  const [policyData, setPolicyData] = useState();\n\n  const changeInAbortionsSince2020 = (\n    dataChange.find((d) => d.STATE === state && d.measure === \"percdiff\")\n      ?.point * 100\n  ).toFixed(1);\n\n  const medicationAbortionsSince2023 = (\n    dataChange.find((d) => d.STATE === state && d.measure === \"propmedab\")\n      ?.point * 100\n  ).toFixed(1);\n\n  useEffect(() => {\n    async function fetchData() {\n      const data = await fetchLiveData();\n\n      setLegislationData(data.legislationData);\n      setPolicyData(data.policyData);\n    }\n\n    fetchData();\n  }, []);\n\n  const policyLevelGrouped = useMemo(() => {\n    if (!policyData) return null;\n\n    return group(policyData, (d) => d.policy);\n  }, [policyData]);\n\n  useGSAP(() => {\n    ScrollTrigger.create({\n      trigger: \"#at-a-glance\",\n      start: \"top 25%\",\n      onEnter: () => {\n        setActiveSection(\"at-a-glance\");\n      },\n    });\n  });\n\n  return (\n    <section\n      id=\"at-a-glance\"\n      className=\"py-20 flex gap-3 gap-y-10 flex-wrap justify-center mx-auto max-w-7xl px-5 md:px-10\"\n    >\n      {policyLevelGrouped &&\n        legislationData &&\n        callouts.map((d, i) => {\n          let value;\n          let icon;\n          let text;\n          let jsx;\n\n          const stateText =\n            state === \"US\" ? \"US states without a total ban\" : abToState[state];\n\n          const stateLegText =\n            state === \"US\" ? \"the United States\" : abToState[state];\n\n          if (d.id === \"estimate\") {\n            if (statesWithTotalBan.includes(state)) return null;\n\n            value = formatY(totalAbortions2023);\n            icon = <Cross className=\"fill-new-navy size-[15px]\" />;\n            text = d.text.replace(\n              \"[the United States/State]\",\n              `<span style=\"font-weight: 700;\">${stateText}</span>`\n            );\n          }\n          if (d.id === \"change\") {\n            if (statesWithTotalBan.includes(state)) return null;\n\n            value = `${Math.abs(changeInAbortionsSince2020)}%`;\n            icon =\n              changeInAbortionsSince2020 > 0 ? (\n                <ArrowBigUp className=\"fill-new-navy size-[20px]\" />\n              ) : (\n                <ArrowBigDown className=\"fill-new-navy size-[20px]\" />\n              );\n            text = d.text\n              .replace(\n                \"[the United States/State]\",\n                `<span style=\"font-weight: 700;\">${stateText}</span>`\n              )\n              .replace(\n                \"[decrease/increase/[0%] change]\",\n                changeInAbortionsSince2020 > 0 ? \"increase\" : \"decrease\"\n              );\n          }\n          if (d.id === \"legislation\") {\n            value =\n              state === \"US\"\n                ? legislationData[\"US\"]\n                : legislationData[abToState[state]];\n            value = new Intl.NumberFormat(\"en-US\").format(value);\n            // DM: Bugfix to display N/A instead of NaN\n            value = value === 'NaN' ? 'N/A' : value;\n            icon = <GavelIcon className=\"fill-new-navy size-[18px]\" />;\n            text = d.text.replace(\n              \"[the United States/State]\",\n              `<span style=\"font-weight: 700;\">${stateLegText}</span>`\n            );\n          }\n          if (d.id === \"policy\" && d.level === \"state\") {\n            if (state === \"US\") return null;\n\n            const policyLevel = policyData.find(\n              (d) => stateToAb[d.state] === state\n            ).policy;\n\n            const color = colors[policyLevel];\n\n            icon = <UsIcon className=\"fill-new-navy size-[20px]\" />;\n            jsx = (\n              <Interpolate\n                string={d.text}\n                mapping={{\n                  state: stateText,\n                  policyLevel: (\n                    <div\n                      className=\"uppercase px-2 py-1 w-fit mx-auto my-2 font-bold rounded\"\n                      style={{\n                        color: color[1],\n                        background: color[0],\n                      }}\n                    >\n                      {policyLevel.replace(\"/\", \"/ \")}\n                    </div>\n                  ),\n                  numStatesSimilarPolicy:\n                    `${policyLevelGrouped?.get(policyLevel)?.length - 1} other ${policyLevelGrouped?.get(policyLevel)?.length - 1 == 1 ? \"state\" : \"states\"}`,\n                }}\n              />\n            );\n          }\n\n          if (d.id === \"policy\" && d.level === \"national\") {\n            if (state !== \"US\") return null;\n\n            value = numStatesTotalAbortionBan;\n            icon = <UsIcon className=\"fill-new-navy size-[20px]\" />;\n            // FIXME:\n            text = d.text.replace(\"[X]\", \"\");\n          }\n\n          if (d.id === \"medication\") {\n            // hide box if state has no data\n            if (medicationAbortionsSince2023 === \"NaN\") return null;\n            value = `${Math.abs(medicationAbortionsSince2023)}%`;\n            icon = <PillIcon className=\"fill-new-navy size-[14px]\" />;\n            text = (state === \"US\") ? d.text : d.state_text;\n           \n            text = text.replace(\n              \"[the United States/State]\",\n              `<span style=\"font-weight: 700;\">${stateText}</span>`\n            );\n            \n          }\n\n          let url;\n          if (d.url) {\n            url = d.url;\n\n            if (d.id === \"policy\" && d.level === \"state\") {\n              url = url.replace(\n                \"[Full state name lowercase]\",\n                stateText.toLowerCase()\n              );\n            }\n          }\n\n          return (\n            <MetricCard\n              key={`callout-${i}`}\n              icon={icon}\n              value={value}\n              text={text}\n              link={url}\n              linkText={d.urlText}\n              jsx={jsx}\n            />\n          );\n        })}\n    </section>\n  );\n};\n\nfunction formatY(value) {\n  return new Intl.NumberFormat(\"en-US\").format(Math.round(value / 100) * 100);\n}\n\nconst colors = {\n  \"Most Restrictive\": [\"#e66a18\", \"#02081F\"],\n  \"Very Restrictive\": [\"#efa06b\", \"#02081F\"],\n  Restrictive: [\"#f5c5a5\", \"#02081F\"],\n  \"Some Restrictions/Protections\": [\"repeating-linear-gradient(-45deg, rgba(97,104,229,0.4) 0 1%, rgba(245, 197, 165,0.7) 1% 4%)\", \"#02081F\"],\n  Protective: [\"#c5c8f5\", \"#02081F\"],\n  \"Very Protective\": [\"#a4a8f0\", \"#02081F\"],\n  \"Most Protective\": [\"#6168e5\", \"#ffffff\"],\n};\n\nexport default MetricsSection;\n","import { scaleBand } from '@visx/vendor/d3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateBandScale = scaleOperator('domain', 'range', 'reverse', 'align', 'padding', 'round');\nexport default function createBandScale(config) {\n  return updateBandScale(scaleBand(), config);\n}","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n  const _date = toDate(date);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { millisecondsInDay } from \"./constants.mjs\";\nimport { startOfDay } from \"./startOfDay.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(dateLeft, dateRight) {\n  const startOfDayLeft = startOfDay(dateLeft);\n  const startOfDayRight = startOfDay(dateRight);\n\n  const timestampLeft =\n    +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  const timestampRight =\n    +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((timestampLeft - timestampRight) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date) {\n  const cleanDate = toDate(date);\n  const _date = constructFrom(date, 0);\n  _date.setFullYear(cleanDate.getFullYear(), 0, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { startOfYear } from \"./startOfYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date) {\n  const _date = toDate(date);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","export function addLeadingZeros(number, targetLength) {\n  const sign = number < 0 ? \"-\" : \"\";\n  const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.mjs\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.mjs\";\nimport { getISOWeek } from \"../../getISOWeek.mjs\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.mjs\";\nimport { getWeek } from \"../../getWeek.mjs\";\nimport { getWeekYear } from \"../../getWeekYear.mjs\";\nimport { addLeadingZeros } from \"../addLeadingZeros.mjs\";\nimport { lightFormatters } from \"./lightFormatters.mjs\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(date.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    const timestamp = date.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  if (!isDate(date) && typeof date !== \"number\") {\n    return false;\n  }\n  const _date = toDate(date);\n  return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { formatters } from \"./_lib/format/formatters.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { isValid } from \"./isValid.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n * @param interval - The interval to check\n *\n * @returns The date is within the interval\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date })\n * // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end })\n * // => true\n */\nexport function isWithinInterval(date, interval) {\n  const time = +toDate(date);\n  const [startTime, endTime] = [\n    +toDate(interval.start),\n    +toDate(interval.end),\n  ].sort((a, b) => a - b);\n\n  return time >= startTime && time <= endTime;\n}\n\n// Fallback for modularized imports:\nexport default isWithinInterval;\n","import { jsx } from 'react/jsx-runtime';\nimport { useContext, useMemo } from 'react';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\nimport { loadExternalIsValidProp } from '../../render/dom/utils/filter-props.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\n\n/**\n * `MotionConfig` is used to set configuration options for all children `motion` components.\n *\n * ```jsx\n * import { motion, MotionConfig } from \"framer-motion\"\n *\n * export function App() {\n *   return (\n *     <MotionConfig transition={{ type: \"spring\" }}>\n *       <motion.div animate={{ x: 100 }} />\n *     </MotionConfig>\n *   )\n * }\n * ```\n *\n * @public\n */\nfunction MotionConfig({ children, isValidProp, ...config }) {\n    isValidProp && loadExternalIsValidProp(isValidProp);\n    /**\n     * Inherit props from any parent MotionConfig components\n     */\n    config = { ...useContext(MotionConfigContext), ...config };\n    /**\n     * Don't allow isStatic to change between renders as it affects how many hooks\n     * motion components fire.\n     */\n    config.isStatic = useConstant(() => config.isStatic);\n    /**\n     * Creating a new config context object will re-render every `motion` component\n     * every time it renders. So we only want to create a new one sparingly.\n     */\n    const context = useMemo(() => config, [JSON.stringify(config.transition), config.transformPagePoint, config.reducedMotion]);\n    return (jsx(MotionConfigContext.Provider, { value: context, children: children }));\n}\n\nexport { MotionConfig };\n","import { motion } from \"framer-motion\";\n\nconst MotionRect = ({\n  y,\n  initialY,\n  height,\n  x,\n  width,\n  fill,\n  fillOpacity,\n  id,\n  ...props\n}) => {\n  return (\n    <motion.rect\n      initial={{\n        height: 0,\n        y: initialY,\n        x: x,\n        fillOpacity: 0,\n        width,\n        fill,\n      }}\n      animate={{\n        height: Math.max(0, isNaN(height) || height),\n        x,\n        y,\n        fillOpacity: fillOpacity ? fillOpacity : 1,\n        width,\n        fill,\n      }}\n      exit={{\n        height: 0,\n        y: initialY,\n        fillOpacity: 0,\n      }}\n      transition={{\n        type: \"spring\",\n        bounce: 0,\n        duration: 1,\n      }}\n      {...props}\n    />\n  );\n};\n\nexport default MotionRect;\n","import _pt from \"prop-types\";\nvar _excluded = [\"top\", \"left\", \"scale\", \"width\", \"stroke\", \"strokeWidth\", \"strokeDasharray\", \"className\", \"children\", \"numTicks\", \"lineStyle\", \"offset\", \"tickValues\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport cx from 'classnames';\nimport Line from '@visx/shape/lib/shapes/Line';\nimport { Group } from '@visx/group';\nimport { Point } from '@visx/point';\nimport { getTicks, coerceNumber } from '@visx/scale';\nimport getScaleBandwidth from '../utils/getScaleBandwidth';\nexport default function GridRows(_ref) {\n  var _ref$top = _ref.top,\n    top = _ref$top === void 0 ? 0 : _ref$top,\n    _ref$left = _ref.left,\n    left = _ref$left === void 0 ? 0 : _ref$left,\n    scale = _ref.scale,\n    width = _ref.width,\n    _ref$stroke = _ref.stroke,\n    stroke = _ref$stroke === void 0 ? '#eaf0f6' : _ref$stroke,\n    _ref$strokeWidth = _ref.strokeWidth,\n    strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n    strokeDasharray = _ref.strokeDasharray,\n    className = _ref.className,\n    children = _ref.children,\n    _ref$numTicks = _ref.numTicks,\n    numTicks = _ref$numTicks === void 0 ? 10 : _ref$numTicks,\n    lineStyle = _ref.lineStyle,\n    offset = _ref.offset,\n    tickValues = _ref.tickValues,\n    restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n  var ticks = tickValues != null ? tickValues : getTicks(scale, numTicks);\n  var scaleOffset = (offset != null ? offset : 0) + getScaleBandwidth(scale) / 2;\n  var tickLines = ticks.map(function (d, index) {\n    var _coerceNumber;\n    var y = ((_coerceNumber = coerceNumber(scale(d))) != null ? _coerceNumber : 0) + scaleOffset;\n    return {\n      index: index,\n      from: new Point({\n        x: 0,\n        y: y\n      }),\n      to: new Point({\n        x: width,\n        y: y\n      })\n    };\n  });\n  return /*#__PURE__*/React.createElement(Group, {\n    className: cx('visx-rows', className),\n    top: top,\n    left: left\n  }, children ? children({\n    lines: tickLines\n  }) : tickLines.map(function (_ref2) {\n    var from = _ref2.from,\n      to = _ref2.to,\n      index = _ref2.index;\n    return /*#__PURE__*/React.createElement(Line, _extends({\n      key: \"row-line-\" + index,\n      from: from,\n      to: to,\n      stroke: stroke,\n      strokeWidth: strokeWidth,\n      strokeDasharray: strokeDasharray,\n      style: lineStyle\n    }, restProps));\n  }));\n}\nGridRows.propTypes = {\n  tickValues: _pt.array,\n  width: _pt.number.isRequired\n};","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","export type validObjectValue = Record<string, any> | null | undefined;\n\nexport default function shallowEqualObjects<T>(\n  objA: validObjectValue,\n  objB: validObjectValue\n): boolean {\n  if (objA === objB) {\n    return true;\n  }\n\n  if (!objA || !objB) {\n    return false;\n  }\n\n  const aKeys = Object.keys(objA);\n  const bKeys = Object.keys(objB);\n  const len = aKeys.length;\n\n  if (bKeys.length !== len) {\n    return false;\n  }\n\n  for (let i = 0; i < len; i++) {\n    const key = aKeys[i];\n\n    if (\n      objA[key] !== objB[key] ||\n      !Object.prototype.hasOwnProperty.call(objB, key)\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import PropTypes from 'prop-types'\n\nconst stringOrNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n\n// media types\nconst types = {\n  all: PropTypes.bool,\n  grid: PropTypes.bool,\n  aural: PropTypes.bool,\n  braille: PropTypes.bool,\n  handheld: PropTypes.bool,\n  print: PropTypes.bool,\n  projection: PropTypes.bool,\n  screen: PropTypes.bool,\n  tty: PropTypes.bool,\n  tv: PropTypes.bool,\n  embossed: PropTypes.bool\n}\n\n// properties that match media queries\nconst matchers = {\n  orientation: PropTypes.oneOf(['portrait', 'landscape']),\n\n  scan: PropTypes.oneOf(['progressive', 'interlace']),\n\n  aspectRatio: PropTypes.string,\n  deviceAspectRatio: PropTypes.string,\n\n  height: stringOrNumber,\n  deviceHeight: stringOrNumber,\n\n  width: stringOrNumber,\n  deviceWidth: stringOrNumber,\n\n  color: PropTypes.bool,\n\n  colorIndex: PropTypes.bool,\n\n  monochrome: PropTypes.bool,\n  resolution: stringOrNumber,\n  type: Object.keys(types)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst { type, ...featureMatchers } = matchers\n\n// media features\nconst features = {\n  minAspectRatio: PropTypes.string,\n  maxAspectRatio: PropTypes.string,\n  minDeviceAspectRatio: PropTypes.string,\n  maxDeviceAspectRatio: PropTypes.string,\n\n  minHeight: stringOrNumber,\n  maxHeight: stringOrNumber,\n  minDeviceHeight: stringOrNumber,\n  maxDeviceHeight: stringOrNumber,\n\n  minWidth: stringOrNumber,\n  maxWidth: stringOrNumber,\n  minDeviceWidth: stringOrNumber,\n  maxDeviceWidth: stringOrNumber,\n\n  minColor: PropTypes.number,\n  maxColor: PropTypes.number,\n\n  minColorIndex: PropTypes.number,\n  maxColorIndex: PropTypes.number,\n\n  minMonochrome: PropTypes.number,\n  maxMonochrome: PropTypes.number,\n\n  minResolution: stringOrNumber,\n  maxResolution: stringOrNumber,\n\n  ...featureMatchers\n}\n\nconst all = { ...types, ...features }\n\nexport default {\n  all: all,\n  types: types,\n  matchers: matchers,\n  features: features\n}\n","import hyphenate from 'hyphenate-style-name'\nimport mq from './mediaQuery'\nimport { MediaQueryAllQueryable } from './types'\n\nconst negate = (cond: string) => `not ${cond}`\n\nconst keyVal = (k: string, v: unknown): string => {\n  const realKey = hyphenate(k)\n\n  // px shorthand\n  if (typeof v === 'number') {\n    v = `${v}px`\n  }\n  if (v === true) {\n    return realKey\n  }\n  if (v === false) {\n    return negate(realKey)\n  }\n  return `(${realKey}: ${v})`\n}\n\nconst join = (conds: string[]): string => conds.join(' and ')\n\nconst toQuery = (obj: Partial<MediaQueryAllQueryable>): string => {\n  const rules: string[] = []\n  Object.keys(mq.all).forEach((k) => {\n    const v = obj[k as keyof MediaQueryAllQueryable]\n    if (v != null) {\n      rules.push(keyVal(k, v))\n    }\n  })\n  return join(rules)\n}\n\nexport default toQuery\n","import { createContext } from 'react'\nimport { MediaQueryAllQueryable } from './types'\n\nconst Context = createContext<Partial<MediaQueryAllQueryable> | undefined>(\n  undefined\n)\n\nexport default Context\n","import { useRef, useEffect, useContext, useState } from 'react'\nimport matchMedia from 'matchmediaquery'\nimport hyphenate from 'hyphenate-style-name'\nimport { shallowEqualObjects } from 'shallow-equal'\nimport toQuery from './toQuery'\nimport Context from './Context'\nimport { MediaQueryAllQueryable, MediaQueryMatchers } from './types'\n\ntype MediaQuerySettings = Partial<MediaQueryAllQueryable & { query?: string }>\ntype HyphenateKeyTypes = MediaQueryMatchers | MediaQueryAllQueryable\n\nconst makeQuery = (settings: MediaQuerySettings) =>\n  settings.query || toQuery(settings)\n\nconst hyphenateKeys = (obj?: HyphenateKeyTypes) => {\n  type K = keyof HyphenateKeyTypes\n\n  if (!obj) return undefined\n  const keys = Object.keys(obj) as K[]\n\n  return keys.reduce(\n    (result, key) => {\n      result[hyphenate(key)] = obj[key]\n      return result\n    },\n    {} as Record<string, (typeof obj)[K]>\n  )\n}\n\nconst useIsUpdate = () => {\n  const ref = useRef(false)\n\n  useEffect(() => {\n    ref.current = true\n  }, [])\n\n  return ref.current\n}\n\nconst useDevice = (\n  deviceFromProps?: MediaQueryMatchers\n): Partial<MediaQueryAllQueryable> | undefined => {\n  const deviceFromContext = useContext(Context)\n  const getDevice = () =>\n    hyphenateKeys(deviceFromProps) || hyphenateKeys(deviceFromContext)\n  const [device, setDevice] = useState(getDevice)\n\n  useEffect(() => {\n    const newDevice = getDevice()\n    if (!shallowEqualObjects(device, newDevice)) {\n      setDevice(newDevice)\n    }\n  }, [deviceFromProps, deviceFromContext])\n\n  return device\n}\n\nconst useQuery = (settings: MediaQuerySettings) => {\n  const getQuery = () => makeQuery(settings)\n  const [query, setQuery] = useState(getQuery)\n\n  useEffect(() => {\n    const newQuery = getQuery()\n    if (query !== newQuery) {\n      setQuery(newQuery)\n    }\n  }, [settings])\n\n  return query\n}\n\nconst useMatchMedia = (query: string, device?: MediaQueryMatchers) => {\n  const getMatchMedia = () => matchMedia(query, device || {}, !!device)\n  const [mq, setMq] = useState(getMatchMedia)\n  const isUpdate = useIsUpdate()\n\n  useEffect(() => {\n    if (isUpdate) {\n      // skip on mounting, it has already been set\n      const newMq = getMatchMedia()\n      setMq(newMq)\n\n      return () => {\n        if (newMq) {\n          newMq.dispose()\n        }\n      }\n    }\n  }, [query, device])\n\n  return mq\n}\n\nconst useMatches = (mediaQuery: MediaQueryList): boolean => {\n  const [matches, setMatches] = useState<boolean>(mediaQuery.matches)\n\n  useEffect(() => {\n    const updateMatches = (ev: MediaQueryListEvent) => {\n      setMatches(ev.matches)\n    }\n    mediaQuery.addListener(updateMatches)\n    setMatches(mediaQuery.matches)\n\n    return () => {\n      mediaQuery.removeListener(updateMatches)\n    }\n  }, [mediaQuery])\n\n  return matches\n}\n\nconst useMediaQuery = (\n  settings: MediaQuerySettings,\n  device?: MediaQueryMatchers,\n  onChange?: (_: boolean) => void\n) => {\n  const deviceSettings = useDevice(device)\n  const query = useQuery(settings)\n  if (!query) throw new Error('Invalid or missing MediaQuery!')\n  const mq = useMatchMedia(query, deviceSettings)\n  const matches = useMatches(mq as unknown as MediaQueryList)\n  const isUpdate = useIsUpdate()\n\n  useEffect(() => {\n    if (isUpdate && onChange) {\n      onChange(matches)\n    }\n  }, [matches])\n\n  useEffect(\n    () => () => {\n      if (mq) {\n        mq.dispose()\n      }\n    },\n    []\n  )\n\n  return matches\n}\n\nexport default useMediaQuery\n","\n\nimport React, { useCallback, useContext, useMemo, useState, useEffect } from \"react\";\nimport useMeasure from \"react-use-measure\";\nimport data from \"@/data/data_bar\";\nimport { scaleBand, scaleLinear } from \"@visx/scale\";\nimport { format, isWithinInterval } from \"date-fns\";\nimport { AxisBottom, AxisLeft } from \"@visx/axis\";\nimport { AnimatePresence, motion, MotionConfig } from \"framer-motion\";\nimport MotionRect from \"@/components/MotionRect\";\nimport { TooltipWithBounds, useTooltip } from \"@visx/tooltip\";\nimport { localPoint } from \"@visx/event\";\nimport { Separator } from \"./ui/separator\";\nimport { GridRows } from \"@visx/grid\";\nimport { DataContext } from \"@/src/App\";\nimport { useMediaQuery } from \"react-responsive\";\nimport parse from 'html-react-parser';\n\nconst xAccessor = (d) => d.date;\nconst yAccessor = (d) => d.nat50;\nconst y0Accessor = (d) => d.nat05;\nconst y1Accessor = (d) => d.nat95;\nconst otherAccessor = (d) => +d.other;\n\n// const xTickFormat = (t) => format(t, \"MMM y\");\n\nconst processedData = data;\n\nconst transition = {\n  type: \"spring\",\n  bounce: 0,\n  duration: 1,\n};\n\nconst tooltipTransition = {\n  type: \"spring\",\n  bounce: 0,\n  duration: 0.5,\n};\n\nconst MonthlyChart = ({\n  state,\n  dateRange,\n  showRange = false,\n  barsTranslateXInit = false,\n  highlightDates,\n  showEvents = false,\n  showTickLabels = false,\n  showValues = false,\n  showAverageLine = false,\n  showYAxis,\n  showChart = true,\n  setShowEventInteractionBubble,\n  nonHighlightOpacity = 1,\n  nonHighlightShow = true,\n  showOtherEstimates = false,\n}) => {\n  const [containerRef, { width, height }] = useMeasure();\n\n  const isSmallScreen = useMediaQuery({ query: \"(max-width: 768px)\" });\n\n  const eventRadius = useMemo(() => {\n    return isSmallScreen ? [10, 6] : [11, 7];\n  }, [isSmallScreen]);\n\n  const { tooltipLeft, tooltipData, showTooltip } = useTooltip();\n  const { tooltipData: eventTooltipData, showTooltip: showEventTooltip } =\n    useTooltip();\n\n  const [hideTooltip, setHideTooltip] = useState(true);\n  const [hideEventTooltip, setHideEventTooltip] = useState(true);\n\n  const { last6MonthsAbortionsAvg, events } = useContext(DataContext);\n\n  const margin = useMemo(() => {\n    return { top: 20, bottom: 40, left: showYAxis ? 50 : 0, right: 0 };\n  }, [showYAxis]);\n\n  const filteredData = processedData.filter((d) => d.state === state);\n  const startDate = dateRange[0];\n  const endDate = dateRange[1];\n  const numBottomTicks = filteredData.length;\n  const currentMon = format(endDate, \"M\");\n\n  const finalData = useMemo(() => {\n    // bounds\n    const xMax = width - margin.left - margin.right;\n    const yMax = height - margin.top - margin.bottom;\n\n    const xScale = scaleBand({\n      domain: filteredData.map(xAccessor),\n      range: [0, xMax],\n      round: true,\n      padding: 0.2,\n      paddingOuter: 0.9,\n    });\n\n\n    // FIXME:\n    // Change scale range according to date range\n    const startDateX = xScale(startDate) - xScale(xScale.domain()[0]);\n    const endDateX =\n      xMax - xScale(endDate) - xScale.bandwidth() - xScale(xScale.domain()[0]);\n    const initX = barsTranslateXInit ? xMax * 0.8 : 0;\n    xScale.range([-startDateX - initX, xMax + endDateX - initX]);\n\n    function maxYScale(maxGutt, maxWeCount) {\n      const max = Math.max(maxGutt, maxWeCount)\n      return max\n    }\n\n    const yScale = scaleLinear({\n      // FIXME: Use overall max instead?\n      domain: [0, maxYScale(Math.max(...filteredData.map(y1Accessor)), (Math.max(...filteredData.filter((d) => d.other !== \"NA\").map(otherAccessor))))],\n      range: [yMax, 0],\n      round: true,\n      // nice: true,\n    });\n\n    return {\n      xMax,\n      yMax,\n      xScale,\n      yScale,\n    };\n  }, [width, margin.left, margin.right, margin.top, margin.bottom, height, filteredData, startDate, endDate, barsTranslateXInit]);\n\n  const { xMax, yMax, xScale, yScale } = finalData;\n\n  const averageValue = useMemo(() => {\n    // Only for the past year\n    // const selectedData = filteredData.slice(-12);\n\n    // return mean(selectedData, yAccessor);\n\n    return last6MonthsAbortionsAvg;\n  }, [last6MonthsAbortionsAvg]);\n\n  const handleTooltip = useCallback(\n    (event) => {\n      const { x } = localPoint(event);\n      const x0 = scaleBandInvert(xScale)(x - margin.left);\n\n      const d = filteredData.find((d) => d.date === x0);\n\n      showTooltip({\n        tooltipData: d,\n        tooltipLeft: xScale(x0),\n      });\n\n      setHideTooltip(false);\n    },\n    [xScale, showTooltip, filteredData, margin.left],\n  );\n\n  const handleEventTooltip = useCallback((d) => {\n    if (setShowEventInteractionBubble) {\n      setShowEventInteractionBubble(false);\n    }\n\n    showEventTooltip({\n      tooltipData: d,\n    });\n\n    setHideEventTooltip(false);\n  }, []);\n\n  function weCountToolTip(tooltipData) {\n    let hidden = tooltipData == \"NaN\" ? true : false;\n    return hidden;\n  }\n\n\n\n  useEffect(() => {\n    setHideTooltip(true);\n    setHideEventTooltip(true);\n  }, [state, dateRange]);\n\n  return (\n    <MotionConfig transition={transition}>\n      <div\n        ref={containerRef}\n        className=\"relative w-full h-full pointer-events-auto\"\n      >\n        {width > 10 && (\n          <svg width={width} height={height} className=\"\">\n            <motion.g\n              initial={{\n                x: margin.left,\n                y: margin.top,\n              }}\n            >\n              {showChart && (\n                <>\n                  <AnimatePresence>\n                    {filteredData.map((d, i) => {\n                      const barHeight = yMax - yScale(yAccessor(d));\n\n                      if (showRange) {\n                        const strokeWidth = 5;\n\n                        return (\n                          <g key={`range-group-${i}`}>\n                            <g key={`range-group-${format(d.date, \"MMM y\")}`}>\n                              {/* Range */}\n                              <MotionRect\n                                key={`range-${d.month}`}\n                                x={xScale(xAccessor(d))}\n                                y={yScale(y1Accessor(d))}\n                                width={xScale.bandwidth()}\n                                height={\n                                  yScale(y0Accessor(d)) - yScale(y1Accessor(d))\n                                }\n                                initialY={yScale(yAccessor(d))}\n                                className=\"fill-new-violet-blue\"\n                                fillOpacity={0.2}\n                              />\n                              {/* Median */}\n                              <MotionRect\n                                key={`median-${d.month}`}\n                                x={xScale(xAccessor(d))}\n                                y={yScale(yAccessor(d)) - strokeWidth / 2}\n                                width={xScale.bandwidth()}\n                                height={strokeWidth / 2}\n                                initialY={yScale(yAccessor(d))}\n                                className={yAccessor(d) == \"0\" ? \"fill-new-violet-blue opacity-0\" : \"fill-new-violet-blue\"}\n                              />\n                            </g>\n                            {/* Other estimates */}\n                            <AnimatePresence>\n                              {showOtherEstimates && (\n                                  <motion.circle\n                                    key={`other-${d.date}`}\n                                    r={5}\n                                    stroke=\"white\"\n                                    strokeWidth={1}\n                                    className=\"fill-[#E66A18]\"\n                                    initial={{\n                                      opacity: 0,\n                                      scale: 0,\n                                      cx:\n                                        xScale(xAccessor(d)) +\n                                        xScale.bandwidth() / 2,\n                                      cy: yScale(otherAccessor(d)),\n                                    }}\n                                    animate={{\n                                      opacity: yScale(otherAccessor(d)),\n                                      scale: 1,\n                                      cx:\n                                        xScale(xAccessor(d)) +\n                                        xScale.bandwidth() / 2,\n                                      cy: yScale(otherAccessor(d)),\n                                    }}\n                                    exit={{\n                                      opacity: 0,\n                                      scale: 0,\n                                      cx:\n                                        xScale(xAccessor(d)) +\n                                        xScale.bandwidth() / 2,\n                                      cy: yScale(otherAccessor(d)),\n                                    }}\n                                    transition={{\n                                      duration: 0.2,\n                                    }}\n                                  />\n                                )}\n                            </AnimatePresence>\n                          </g>\n                        );\n                      } else {\n                        if (\n                          !nonHighlightShow &&\n                          !isWithinInterval(xAccessor(d), {\n                            start: startDate,\n                            end: endDate,\n                          })\n                        ) {\n                          // FIXME: Add a better way to handle this id there is\n                          return null;\n                        }\n                        return (\n                          <g key={`bar-${d.date}`}>\n                            {/* Bars */}\n                            <MotionRect\n                              fill={\n                                highlightDates\n                                  ? highlightDates.includes(d.date)\n                                    ? \"var(--color-new-violet-blue)\"\n                                    : \"#DFE1FA\"\n                                  : isWithinInterval(xAccessor(d), {\n                                        start: startDate,\n                                        end: endDate,\n                                      })\n                                    ? \"var(--color-new-violet-blue)\"\n                                    : \"#DFE1FA\"\n                              }\n                              key={`bar-${d.date}`}\n                              x={xScale(xAccessor(d))}\n                              y={yMax - barHeight}\n                              width={xScale.bandwidth()}\n                              height={barHeight}\n                              initialY={yMax}\n                            />\n                            {/* Values label */}\n                            {showValues && (\n                              <motion.text\n                                key={`value-${d.date}`}\n                                initial={{\n                                  opacity: 0,\n                                  x:\n                                    xScale(xAccessor(d)) +\n                                    xScale.bandwidth() / 2,\n                                  y: yMax - barHeight - 10,\n                                }}\n                                animate={{\n                                  opacity: 1,\n                                  x:\n                                    xScale(xAccessor(d)) +\n                                    xScale.bandwidth() / 2,\n                                  y: yMax - barHeight - 10,\n                                }}\n                                exit={{\n                                  opacity: 0,\n                                }}\n                                textAnchor=\"middle\"\n                                fontWeight={\n                                  highlightDates\n                                    ? highlightDates.includes(d.date)\n                                      ? 600\n                                      : 400\n                                    : 400\n                                }\n                                fill={\n                                  highlightDates\n                                    ? highlightDates.includes(d.date)\n                                      ? \"black\"\n                                      : \"var(--color-gray-60)\"\n                                    : \"black\"\n                                }\n                                className=\"text-[10px] sm:text-xs inline\"\n                              >\n                                {formatY(yAccessor(d))}\n                              </motion.text>\n                            )}\n                          </g>\n                        );\n                      }\n                    })}\n                  </AnimatePresence>\n\n                  {/* Average Line */}\n                  <AnimatePresence>\n                    {showAverageLine && (\n                      <>\n                        <motion.line\n                          initial={{\n                            opacity: 0,\n                            x2: 0,\n                          }}\n                          animate={{\n                            opacity: 1,\n                            x2: xMax,\n                          }}\n                          exit={{ opacity: 0 }}\n                          y1={yScale(averageValue)}\n                          y2={yScale(averageValue)}\n                          stroke=\"black\"\n                          strokeWidth={2}\n                          strokeDasharray={3}\n                        />\n                        <motion.g\n                          initial={{\n                            opacity: 0,\n                          }}\n                          animate={{\n                            opacity: 1,\n                          }}\n                          exit={{ opacity: 0 }}\n                          style={{\n                            translateX: xMax - 80,\n                            translateY: yScale(averageValue) + 10,\n                          }}\n                        >\n                          <text\n                            className=\"text-xs font-medium\"\n                            dominantBaseline=\"hanging\"\n                          >\n                            <tspan x={0}>{formatY(averageValue)}</tspan>{\" \"}\n                            <tspan x={0} dy={15}>\n                              AVERAGE\n                            </tspan>\n                          </text>\n                        </motion.g>\n                      </>\n                    )}\n                  </AnimatePresence>\n\n                  {/* Axes */}\n                  {showYAxis && (\n                    <>\n                      <AxisLeft\n                        scale={yScale}\n                        hideAxisLine\n                        hideTicks\n                        numTicks={4}\n                        tickLabelProps={{\n                          fontFamily: \"var(--font-gotham)\",\n                        }}\n                      />\n                      <GridRows\n                        scale={yScale}\n                        width={xMax}\n                        numTicks={4}\n                        stroke=\"var(--color-gray-90)\"\n                        strokeDasharray=\"2\"\n                      />\n                    </>\n                  )}\n                  <AxisBottom\n                    top={yMax}\n                    scale={xScale}\n                    tickLength={0}\n                    numTicks={numBottomTicks}\n                    hideAxisLine\n                  >\n                    {(props) => {\n                      const { ticks, tickLabelProps, labelOffset } = props;\n                      const textY = labelOffset + 10;\n\n                      return (\n                        <>\n                          {ticks.map((t) => {\n                            const isHighlighted = highlightDates?.includes(\n                              t.value,\n                            );\n\n                            const tickText = isHighlighted\n                              ? format(t.value, \"MMM y\")\n                              : t.value === endDate\n                                ? format(t.value, \"MMM\")\n                                : format(t.value, \"MMM\");\n\n                            if (\n                              !isWithinInterval(t.value, {\n                                start: startDate,\n                                end: endDate,\n                              })\n                            ) {\n                              // FIXME: Add a better way to handle this id there is\n                              return null;\n                            }\n\n                            return (\n                              <AnimatePresence\n                                key={`tick-${format(t.value, \"MMM y\")}`}\n                              >\n                                {/* <AnimatePresence> */}\n                                {showTickLabels || isHighlighted ? (\n                                  <motion.text\n                                    key={`tick-${format(t.value, \"MMM y\")}`}\n                                    className=\"text-[10px] uppercase md:text-[10px]\"\n                                    {...tickLabelProps}\n                                    y={textY}\n                                    fontWeight={isHighlighted ? 600 : 400}\n                                    fill={\n                                      highlightDates\n                                        ? isHighlighted\n                                          ? \"black\"\n                                          : \"var(--color-gray-60)\"\n                                        : \"black\"\n                                    }\n                                    initial={{\n                                      opacity: 0,\n                                      x: t.from.x,\n                                    }}\n                                    animate={{\n                                      opacity: 1,\n                                      x: t.from.x,\n                                    }}\n                                    exit={{\n                                      opacity: 0,\n                                    }}\n                                    transition={transition}\n                                    fontFamily={\"var(--font-gotham)\"}\n                                  >\n                                    {tickText}\n                                  </motion.text>\n                                ) : null}\n                              </AnimatePresence>\n                            );\n                          })}\n                          <AnimatePresence>\n                            {!showTickLabels && (\n                              <>\n                                <motion.text\n                                  key={\"2023 text\"}\n                                  {...tickLabelProps}\n                                  y={textY}\n                                  initial={{\n                                    opacity: 0,\n                                    x: ticks[0].from.x,\n                                  }}\n                                  animate={{\n                                    opacity: 1,\n                                    x: ticks[0].from.x,\n                                  }}\n                                  exit={{\n                                    opacity: 0,\n                                  }}\n                                  transition={transition}\n                                  fontFamily={\"var(--font-gotham)\"}\n                                >\n                                  {2023}\n                                </motion.text>\n                                <motion.text\n                                  key={\"2024 text\"}\n                                  {...tickLabelProps}\n                                  y={textY}\n                                  initial={{\n                                    opacity: 0,\n                                    x: ticks[numBottomTicks-currentMon].from.x,\n                                  }}\n                                  animate={{\n                                    opacity: 1,\n                                    x: ticks[numBottomTicks-currentMon].from.x,\n                                  }}\n                                  exit={{\n                                    opacity: 0,\n                                  }}\n                                  transition={transition}\n                                  fontFamily={\"var(--font-gotham)\"}\n                                >\n                                  {2024}\n                                </motion.text>\n                              </>\n                            )}\n                          </AnimatePresence>\n                        </>\n                      );\n                    }}\n                  </AxisBottom>\n                </>\n              )}\n\n              <motion.line\n                x1={0}\n                // x2={width}\n                y1={yMax}\n                y2={yMax}\n                initial={{\n                  x2: 0,\n                }}\n                animate={{\n                  x2: width,\n                }}\n                className=\"stroke-gray-10 stroke-[3px]\"\n                transition={transition}\n              />\n\n              {/* Tooltip line */}\n              <AnimatePresence>\n                {!hideTooltip && showRange && (\n                  <motion.line\n                    y2={yMax}\n                    initial={{\n                      strokeOpacity: 0,\n                      x1: tooltipLeft + xScale.bandwidth() / 2,\n                      x2: tooltipLeft + xScale.bandwidth() / 2,\n                    }}\n                    animate={{\n                      strokeOpacity: 1,\n                      x1: tooltipLeft + xScale.bandwidth() / 2,\n                      x2: tooltipLeft + xScale.bandwidth() / 2,\n                    }}\n                    exit={{\n                      strokeOpacity: 0,\n                    }}\n                    className={\"stroke-gray-10 stroke-[1px] invisible sm:visible\"}\n                    transition={tooltipTransition}\n                  />\n                )}\n              </AnimatePresence>\n\n              {/* Event dots */}\n              <AnimatePresence>\n                {showEvents &&\n                  events.map((event) => {\n                    const dateObject = event.dateObject;\n\n                    const x = xScale(dateObject) + xScale.bandwidth() / 2;\n                    const y = yMax;\n\n                    const d = {\n                      date: event.date,\n                      text: event.text,\n                      x,\n                      y,\n                    };\n\n                    return (\n                      <motion.circle\n                        initial={{\n                          r: 0,\n                          cx: x,\n                        }}\n                        animate={{\n                          r: highlightDates?.includes(dateObject)\n                            ? eventRadius[0]\n                            : eventRadius[1],\n                          cx: x,\n                        }}\n                        exit={{\n                          r: 0,\n                        }}\n                        key={`event-${dateObject}`}\n                        cy={y}\n                        className=\"stroke-black stroke-[3px] pointer-events-auto\"\n                        fill=\"#E1FC66\"\n                        onTouchStart={() => handleEventTooltip(d)}\n                        onTouchMove={() => handleEventTooltip(d)}\n                        onMouseEnter={() => handleEventTooltip(d)}\n                        onMouseLeave={() => setHideEventTooltip(true)}\n                      />\n                    );\n                  })}\n              </AnimatePresence>\n            </motion.g>\n          </svg>\n        )}\n        {/* Tooltip */}\n        <AnimatePresence>\n          {!hideTooltip && showRange && (\n            <MotionConfig transition={tooltipTransition}>\n              <motion.div\n                className=\"absolute top-0 invisible sm:visible\"\n                initial={{\n                  opacity: 0,\n                  left: tooltipLeft + xScale.bandwidth() / 2 + margin.left,\n                  translateX:\n                    filteredData.indexOf(tooltipData) < filteredData.length / 2\n                      ? 0\n                      : \"-100%\",\n                }}\n                animate={{\n                  opacity: 1,\n                  left: tooltipLeft + xScale.bandwidth() / 2 + margin.left,\n                  translateX:\n                    filteredData.indexOf(tooltipData) < filteredData.length / 2\n                      ? 0\n                      : \"-100%\",\n                }}\n                exit={{\n                  opacity: 0,\n                  left: tooltipLeft + xScale.bandwidth() / 2 + margin.left,\n                  translateX:\n                    filteredData.indexOf(tooltipData) < filteredData.length / 2\n                      ? 0\n                      : \"-100%\",\n                }}\n              >\n                <TooltipWithBounds\n                  left={-10}\n                  top={yMax}\n                  unstyled\n                  className=\"w-[240px] border border-gray-10 bg-white p-4 text-xs\"\n                >\n                  <div className=\"mb-3 font-medium uppercase\">\n                    {format(tooltipData.date, \"MMM y\")}\n                  </div>\n                  <div className=\"flex gap-2 mb-4\">\n                    <div className=\"text-base font-medium text-new-violet-blue\">\n                      {formatY(yAccessor(tooltipData))}\n                    </div>\n                    <div>median estimate of abortions provided</div>\n                  </div>\n                  <Separator className=\"mb-3 bg-gray-90\" />\n                  <div className=\"flex gap-2\">\n                    <div className=\"invisible text-base font-medium\">\n                      {formatY(yAccessor(tooltipData))}\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <div>90% uncertainty interval</div>\n                      <div className=\"italic font-medium\">{`${formatY(\n                        y0Accessor(tooltipData),\n                      )}—${formatY(y1Accessor(tooltipData))}`}</div>\n                    </div>\n                  </div>\n                  <Separator className={showOtherEstimates && !weCountToolTip(formatY(otherAccessor(tooltipData))) ? \"mt-3 mb-3 bg-gray-90\" : \"hidden mt-3 mb-3 bg-gray-90\"} />\n                  <div className={showOtherEstimates && !weCountToolTip(formatY(otherAccessor(tooltipData))) ? \"flex gap-2\" : \"hidden flex gap-2\"}>\n                    <div className=\"invisible text-base font-medium\">\n                      {formatY(otherAccessor(tooltipData))}\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <div>#WeCount estimate</div>\n                      <div className=\"font-medium italic text-[#E66A18]\">\n                        {formatY(otherAccessor(tooltipData))}\n                      </div>\n                    </div>\n                  </div>\n\n                </TooltipWithBounds>\n              </motion.div>\n            </MotionConfig>\n          )}\n        </AnimatePresence>\n        <AnimatePresence>\n          {!hideEventTooltip && (\n            <TooltipWithBounds\n              left={eventTooltipData.x}\n              top={eventTooltipData.y}\n              // offsetLeft={0}\n              offsetTop={0}\n              // unstyled\n              className=\"w-[240px] -translate-y-full border border-black bg-white !p-4 text-xs !text-black\"\n            >\n              {parse(eventTooltipData.text)}\n            </TooltipWithBounds>\n          )}\n        </AnimatePresence>\n        {/* Interaction capture */}\n        <div\n          className=\"absolute top-0 w-full bg-transparent\"\n          style={{\n            height: yMax,\n          }}\n          onTouchStart={handleTooltip}\n          onTouchMove={handleTooltip}\n          onMouseMove={handleTooltip}\n          onMouseLeave={() => setHideTooltip(true)}\n        />\n      </div>\n    </MotionConfig>\n  );\n};\n\nfunction scaleBandInvert(scale) {\n  const domain = scale.domain();\n  const paddingOuter = scale(domain[0]);\n  const eachBand = scale.step();\n  return function (value) {\n    const index = Math.floor((value - paddingOuter) / eachBand);\n    return domain[Math.max(0, Math.min(index, domain.length - 1))];\n  };\n}\n\nfunction formatY(value) {\n  // return new Intl.NumberFormat(\"en-US\").format(Math.ceil(value / 100) * 100);\n  return new Intl.NumberFormat(\"en-US\").format(Math.round(value / 10) * 10);\n}\n\nexport default MonthlyChart;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronsRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiAxNyA1LTUtNS01IiAvPgogIDxwYXRoIGQ9Im0xMyAxNyA1LTUtNS01IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevrons-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsRight = createLucideIcon('ChevronsRight', [\n  ['path', { d: 'm6 17 5-5-5-5', key: 'xnjwq' }],\n  ['path', { d: 'm13 17 5-5-5-5', key: '17xmmf' }],\n]);\n\nexport default ChevronsRight;\n","\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef(\n  ({ className, children, ...props }, ref) => (\n    <SelectPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex h-10 w-full items-center justify-between border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <SelectPrimitive.Icon asChild>\n        <ChevronDown className=\"h-4 w-4 opacity-50\" />\n      </SelectPrimitive.Icon>\n    </SelectPrimitive.Trigger>\n  )\n);\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef(\n  ({ className, ...props }, ref) => (\n    <SelectPrimitive.ScrollUpButton\n      ref={ref}\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronUp className=\"h-4 w-4\" />\n    </SelectPrimitive.ScrollUpButton>\n  )\n);\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef(\n  ({ className, ...props }, ref) => (\n    <SelectPrimitive.ScrollDownButton\n      ref={ref}\n      className={cn(\n        \"flex cursor-default items-center justify-center py-1\",\n        className\n      )}\n      {...props}\n    >\n      <ChevronDown className=\"h-4 w-4\" />\n    </SelectPrimitive.ScrollDownButton>\n  )\n);\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef(\n  ({ className, children, position = \"popper\", ...props }, ref) => (\n    <SelectPrimitive.Portal>\n      <SelectPrimitive.Content\n        ref={ref}\n        className={cn(\n          \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n          position === \"popper\" &&\n            \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n          className\n        )}\n        position={position}\n        {...props}\n      >\n        <SelectScrollUpButton />\n        <SelectPrimitive.Viewport\n          className={cn(\n            \"p-1\",\n            position === \"popper\" &&\n              \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n          )}\n        >\n          {children}\n        </SelectPrimitive.Viewport>\n        <SelectScrollDownButton />\n      </SelectPrimitive.Content>\n    </SelectPrimitive.Portal>\n  )\n);\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n    {...props}\n  />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef(\n  ({ className, children, ...props }, ref) => (\n    <SelectPrimitive.Item\n      ref={ref}\n      className={cn(\n        \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <Check className=\"h-4 w-4\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  )\n);\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n};\n","import React from \"react\";\nimport {\n  Select,\n  SelectContent,\n  SelectItem,\n  SelectTrigger,\n  SelectValue,\n} from \"@/components/ui/select\";\nimport { stateToAb } from \"@/data/states\";\nimport { cn } from \"@/lib/utils\";\n\nconst StateSelect = ({ value, onValueChange, className = \"\" }) => {\n  return (\n    <Select value={value} onValueChange={onValueChange} className=\"\">\n      <SelectTrigger\n        className={cn(\n          \"w-[200px] text-gray-10 text-[14px] font-medium relative\",\n          className\n        )}\n      >\n        <SelectValue className=\"\" />\n      </SelectTrigger>\n      <SelectContent>\n        {Object.entries(stateToAb).map(([state, ab], i) => (\n          <SelectItem key={i} value={ab}>\n            {state}\n          </SelectItem>\n        ))}\n      </SelectContent>\n    </Select>\n  );\n};\n\nexport default StateSelect;\n","const UncertaintyIntervalIcon = ({ className }) => {\n  return (\n    <svg\n      width=\"43\"\n      height=\"31\"\n      viewBox=\"0 0 43 31\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className={className}\n    >\n      <rect\n        opacity=\"0.2\"\n        x=\"8.22852\"\n        y=\"0.604004\"\n        width=\"18\"\n        height=\"30\"\n        fill=\"#6168E5\"\n      />\n      <rect x=\"8.22852\" y=\"14.104\" width=\"18\" height=\"3\" fill=\"#6168E5\" />\n      <path d=\"M0.228516 15.604H8.22852\" stroke=\"#222222\" />\n      <path d=\"M34.3613 15.6038H42.4937\" stroke=\"#222222\" />\n      <path d=\"M26.2285 6.60388H34.3608V24.6039H26.2285\" stroke=\"#222222\" />\n    </svg>\n  );\n};\n\nexport default UncertaintyIntervalIcon;\n","import { cn } from \"@/lib/utils\";\nimport UncertaintyIntervalIcon from \"./UncertaintyIntervalIcon\";\n\nconst EstimatesChartLegend = ({ className }) => {\n  return (\n    <div className={cn(\"flex items-center gap-2\", className)}>\n      <div className=\"text-right text-xs\">\n        <span className=\"font-medium\">50%</span> uncertainty <br /> interval\n      </div>\n      <UncertaintyIntervalIcon />\n      <div className=\"text-xs\">\n        <span className=\"font-medium\">90%</span> uncertainty <br /> interval\n      </div>\n    </div>\n  );\n};\n\nexport default EstimatesChartLegend;\n","/* eslint-disable eqeqeq */\nimport { cn } from \"@/lib/utils\";\nimport { Switch } from \"./ui/switch\";\n\nconst EstimatesToggle = ({ show, setShow, className }) => {\n  function setToggleClass(showOutflow, flow) {\n    if (flow == \"inflow\") {\n      let toggleClass = !showOutflow ? \"font-bold\" : \"\";\n      return toggleClass;\n    } else {\n      let toggleClass = showOutflow ? \"font-bold\" : \"\";\n      return toggleClass;\n    }\n  }\n\n  return (\n    <div className=\"flex flex-row items-center mt-10 md:mt-0\">\n      <div className=\"toggle\">\n        <div\n          className={cn(\n            \"flex items-center space-x-2 text-xs text-gray-40\",\n            className,\n          )}\n        >\n          <div className={\"text-right \" + setToggleClass(show, \"inflow\")}>\n            Hide\n          </div>\n          <div className=\"relative m-0 ml-0 mr-0\">\n            <Switch\n              id=\"airplane-mode\"\n              checked={show}\n              onCheckedChange={setShow}\n              className={\"!bg-[#F0F1FD]\"}\n            />\n            <div className=\"absolute flex font-bold -translate-x-1/2 -translate-y-full align-center -top-1 left-1/2 w-max\">\n              <span className=\"mt-[3px] mr-1 inline-block w-[8px] h-[8px] bg-[#E66A18] rounded-full\"></span>\n              <span>#WECOUNT ESTIMATES</span>\n            </div>\n          </div>\n          <div className={\"text-left\" + setToggleClass(show, \"outflow\")}>\n            Show\n          </div>\n        </div>\n      </div>\n      {/* <div className=\"py-2 pl-4 text-xs italic note text-gray-40\">\n        Note: Counts &lt;100 not shown\n      </div> */}\n    </div>\n  );\n};\n\nexport default EstimatesToggle;\n","import { dates } from \"@/data/data_bar\";\nimport MonthlyChart from \"./MonthlyChart\";\nimport { abToState } from \"@/data/states\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport MissingData from \"./MissingData\";\nimport PointIcon from \"./PointIcon\";\nimport { useContext, useState, useMemo } from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\nimport DownloadIcon from \"./DownloadIcon\";\nimport { PageContext } from \"@/src/App\";\nimport gsap from \"gsap\";\nimport { useGSAP } from \"@gsap/react\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { format } from \"date-fns\";\nimport entireCopy from \"@/data/copy.json\";\nimport { ChevronsRight } from \"lucide-react\";\nimport ShareChartButton from \"./ShareChartButton\";\nimport DownloadDataButton from \"./DownloadDataButton\";\nimport StateSelect from \"./StateSelect\";\nimport SectionTitle from \"./SectionTitle\";\nimport SectionSubtitle from \"./SectionSubtitle\";\nimport timeline from \"@/data/data_state_timeline.json\";\nimport EstimatesChartLegend from \"./EstimatesChartLegend\";\nimport EstimatesToggle from \"./EstimatesToggle\";\nimport parse from 'html-react-parser';\nimport TitleStateSelect from \"./TitleStateSelect\";\nimport Interpolate from \"@doist/react-interpolate\";\n\nconst copy = entireCopy[\"estimate-chart\"][0];\n\ngsap.registerPlugin(useGSAP);\ngsap.registerPlugin(ScrollTrigger);\n\nfunction indianaCheck(hasTotalBan, state) {\n  let check = !hasTotalBan ? true : hasTotalBan && state ==\"IN\" ? true : false\n  return check;\n}\n\nconst MonthlyChartSection = ({ state, setState, hasTotalBanMon }) => {\n  const { setActiveSection } = useContext(PageContext);\n\n  const [chartInteract, setChartInteract] = useState(false);\n  const [showOtherEstimates, setShowOtherEstimates] = useState(false);\n\n  const hasTotalBan = useMemo(() => {\n    return timeline.find((d) => d.state === state).hasTotalBan === \"Y\";\n  }, [state]);\n\n  useGSAP(\n    () => {\n      ScrollTrigger.create({\n        trigger: \"#the-estimates\",\n        start: \"top 25%\",\n        onEnter: () => {\n          setActiveSection(\"the-estimates\");\n        },\n        onLeaveBack: () => {\n          setActiveSection(\"at-a-glance\");\n        },\n      });\n    },\n    { dependencies: [state], revertOnUpdate: true },\n  );\n\n  return (\n    <section\n      id=\"the-estimates\"\n      className=\"relative m-auto max-w-7xl rounded-[3px] border border-[#C9C9C9] bg-white px-5 py-10\">\n      <SectionSubtitle state={state}>\n        {formatDate(dates[0])} - {formatDate(dates.at(-1))}\n      </SectionSubtitle>\n      <SectionTitle>\n        <Interpolate\n          string={copy.title}\n          mapping={{\n            state: <TitleStateSelect value={state} onValueChange={setState} />,\n          }}\n        />\n      </SectionTitle>\n      <div className=\"w-full gap-10 mt-10 md:grid md:grid-cols-3\">\n        <div\n          className=\"relative col-span-2 h-[400px] md:h-auto\"\n          onMouseOver={() => setChartInteract(true)}\n        >\n          {!indianaCheck(hasTotalBanMon, state) && <MissingData state={state} placement={\"estimates\"} />}\n          <MonthlyChart\n            state={state}\n            dateRange={[dates[0], dates.at(-1)]}\n            showRange\n            barsTranslateXInit={false}\n            showEvents\n            showYAxis\n            showOtherEstimates={showOtherEstimates}\n          />\n          <AnimatePresence>\n            {!chartInteract && (\n              <InteractionBubble className=\"absolute top-0 right-0 grid invisible p-2 rounded-full size-12 place-content-center sm:visible animation-wiggle\">\n                <PointIcon className=\"size-8\" />\n              </InteractionBubble>\n            )}\n          </AnimatePresence>\n        </div>\n        {/* for mobile */}\n        <div className=\"flex flex-col items-center justify-between w-full px-2 mt-10 sm:flex-row md:hidden\">\n          <EstimatesChartLegend />\n          <EstimatesToggle\n            show={showOtherEstimates}\n            setShow={setShowOtherEstimates}\n          />\n        </div>\n        <div className=\"col-span-1 mt-10 space-y-6 text-sm md:mt-0\">\n          <h3 className=\"font-[500] text-new-navy font-headline text-xl\">{copy.subtitle}</h3>\n          {copy.text.map(({ value }, i) => {\n            return <p key={i}>{parse(value)}</p>;\n          })}\n          <div className=\"items-center\">\n            <a\n              href=\"#methodology\"\n              className=\"underline\"\n            >\n              <p className=\"underline\">{copy.links[0].text}<span className=\"inline-block -mb-[2px]\"><ChevronsRight className=\"size-4\" /></span></p>\n            </a>\n          </div>\n        </div>\n      </div>\n      <div className=\"flex justify-between mt-10 text-gray-40\">\n        {/* for desktop */}\n        <EstimatesChartLegend className=\"hidden md:flex\" />\n        <EstimatesToggle\n          show={showOtherEstimates}\n          setShow={setShowOtherEstimates}\n          className=\"hidden md:flex\"\n        />\n        <div className=\"flex gap-4 ml-auto md:ml-0\">\n          <ShareChartButton url=\"https://www.guttmacher.org/monthly-abortion-provision-study\" />\n          <DownloadDataButton url=\"https://osf.io/k4x7t/\" />\n        </div>\n      </div>\n    </section>\n  );\n};\n\nfunction formatDate(date) {\n  return format(date, \"MMM y\");\n}\n\nfunction titleHighlightHtml(text) {\n  return `<span style=\"display: inline-block; background-color: var(--color-new-highlighter); padding: 0 4px;\">${text}</span>`;\n}\n\nexport default MonthlyChartSection;\n","import { motion } from \"framer-motion\";\n\nconst NavItem = ({ active, href, children }) => {\n  return (\n    <motion.a\n      href={href}\n      animate={{\n        backgroundColor: active ? \"#F0F1FD\" : \"#ffffff\",\n        borderBottom: \"3px solid\",\n        borderBottomColor: active ? \"var(--color-new-navy)\" : \"#ffffff\",\n        color: active ? \"var(--color-new-navy)\" : \"var(--color-gray-40)\",\n        fontWeight: active ? 600 : 400,\n      }}\n      style={{\n        // fontWeight: active ? 600 : 400,\n      }}\n      className=\"st-nav-link hidden h-full flex items-center justify-content-center !px-2.5 !pt-6 !py-4 text-xs text-center cursor-pointer no-underline md:block md:text-xs lg:text-sm hover:underline\"\n    >\n      {children}\n    </motion.a>\n  );\n};\n\nexport default NavItem;\n","\n\nimport React, { useContext } from \"react\";\nimport NavItem from \"./NavItem\";\nimport StateSelect from \"./StateSelect\";\nimport { PageContext } from \"@/src/App\";\n// import { useMediaQuery } from \"react-responsive\";\n\nconst NavBar = ({ state, setState }) => {\n  const { activeSection } = useContext(PageContext);\n\n  // const isSmallScreen = useMediaQuery({ query: \"(max-width: 700px)\" });\n\n  return (\n    <div className=\"sticky top-0 left-0 w-full flex justify-stretch shadow-[0_8px_12px_-4px_rgba(0,0,0,0.05)] items-center py-3 bg-white z-40 md:py-0\">\n      <div className=\"inset-helper h-[40px] w-full px-4 max-w-7xl m-auto flex flex-row justify-between items-center gap-10 md:h-[70px]\">\n      <div className=\"flex flex-row items-center h-full\">\n          <NavItem href=\"#at-a-glance\" active={activeSection === \"at-a-glance\"}>At A Glance</NavItem>\n          <NavItem href=\"#the-estimates\" active={activeSection === \"the-estimates\"}>Detailed Estimates</NavItem>\n          <NavItem href=\"#interstate-travel\" active={activeSection === \"interstate-travel\"}>Interstate Travel</NavItem>\n          <NavItem href=\"#policy-analysis\" active={activeSection === \"policy-analysis\"}>Policy Analysis</NavItem>\n          <NavItem href=\"#methodology\" active={activeSection === \"methodology\"}>Methodology</NavItem>\n      </div>\n      <StateSelect\n        value={state}\n        onValueChange={setState}\n        className=\"st-highlight-dropdown text-sm ml-auto bg-new-highlighter !border-none !rounded-sm !my-4 shadow-[0_8px_12px_-4px_rgba(0,0,0,0.03)]\"\n      />\n      </div>\n    </div>\n  );\n};\n\nexport default NavBar;\n","import { PageContext } from \"@/src/App\";\nimport gsap from \"gsap\";\nimport { useGSAP } from \"@gsap/react\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useContext } from \"react\";\nimport copy from \"@/data/copy.json\";\nimport SectionTitle from \"./SectionTitle\";\n\ngsap.registerPlugin(useGSAP);\ngsap.registerPlugin(ScrollTrigger);\n\nconst PolicySection = ({ state }) => {\n  const { setActiveSection } = useContext(PageContext);\n\n  useGSAP(\n    () => {\n      ScrollTrigger.create({\n        trigger: \"#policy-analysis\",\n        start: \"top 25%\",\n        onEnter: () => {\n          setActiveSection(\"policy-analysis\");\n        },\n        onLeaveBack: () => {\n          setActiveSection(\"interstate-travel\");\n        },\n      });\n    },\n    { dependencies: [state], revertOnUpdate: true },\n  );\n\n  return (\n    <div\n      id=\"policy-analysis\"\n      className=\"m-auto max-w-7xl py-10 py-20\"\n    >\n      <section>\n        {/* Policy */}\n        <SectionTitle>Policy and Data Analysis</SectionTitle>\n        <ul className=\"mt-4\">\n          {copy[\"policy\"]?.map((d, i) => {\n            return (\n              <li\n                key={i}\n                className=\"flex flex-row policy-item mt-[28px] border-t border-[#C9C9C9] pt-[28px]\"\n              >\n                <a href={d.policyURL} className=\"no-underline\">\n                  <div className=\"w-[100px] mr-4 rounded hover:opacity-80\">\n                    <img className=\"rounded\" src={d.imageURL} />\n                  </div>\n                </a>\n                <div>\n                  <p className=\"text-[12px] uppercase text-[#555555]\">\n                    <span className=\"pr-2\">{d.date}</span>{/*|*/}\n                    {/* <span className=\"pl-2\">{d.category}</span> */}\n                  </p>\n                  <a href={d.policyURL} className=\"st-policy-headline no-underline text-new-navy hover:text-[#6168E5] \">\n                    <p className=\"mt-[4px] font-headline text-xl font-[500] md:text-2xl\">\n                      {d.title}\n                    </p>\n                  </a>\n                </div>\n              </li>\n            );\n          })}\n        </ul>\n      </section>\n    </div>\n  );\n};\n\nexport default PolicySection;\n","import React, { useCallback } from \"react\";\n\n// Custom hook to detect key press\nconst useKeyPress = (targetKey) => {\n  const [keyPressed, setKeyPressed] = React.useState(false);\n\n  const handleKeyDown = useCallback(\n    ({ key }) => {\n      if (key === targetKey) {\n        setKeyPressed(true);\n      }\n    },\n    [targetKey]\n  );\n\n  const handleKeyUp = useCallback(\n    ({ key }) => {\n      if (key === targetKey) {\n        setKeyPressed(false);\n      }\n    },\n    [targetKey]\n  );\n\n  React.useEffect(() => {\n    window.addEventListener(\"keydown\", handleKeyDown);\n    window.addEventListener(\"keyup\", handleKeyUp);\n\n    return () => {\n      window.removeEventListener(\"keydown\", handleKeyDown);\n      window.removeEventListener(\"keyup\", handleKeyUp);\n    };\n  }, [handleKeyDown, handleKeyUp]);\n\n  return keyPressed;\n};\n\nexport default useKeyPress;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTUgMTgtNi02IDYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronLeft = createLucideIcon('ChevronLeft', [\n  ['path', { d: 'm15 18-6-6 6-6', key: '1wnfg3' }],\n]);\n\nexport default ChevronLeft;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('ChevronRight', [\n  ['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }],\n]);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\n\n/**\n * @component @name Mouse\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB4PSI1IiB5PSIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMjAiIHJ4PSI3IiAvPgogIDxwYXRoIGQ9Ik0xMiA2djQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/mouse\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Mouse = createLucideIcon('Mouse', [\n  ['rect', { x: '5', y: '2', width: '14', height: '20', rx: '7', key: '11ol66' }],\n  ['path', { d: 'M12 6v4', key: '16clxf' }],\n]);\n\nexport default Mouse;\n","import useKeyPress from \"@/lib/useKeyPress\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport { Mouse } from \"lucide-react\";\n\nconst Stepper = ({ numSteps = 8, activeStep, onActiveStepChange }) => {\n  const leftArrowPressed = useKeyPress(\"ArrowLeft\");\n  const rightArrowPressed = useKeyPress(\"ArrowRight\");\n\n  useEffect(() => {\n    if (leftArrowPressed) {\n      onActiveStepChange(Math.max(activeStep - 1, 0));\n    }\n  }, [activeStep, leftArrowPressed, onActiveStepChange]);\n\n  useEffect(() => {\n    if (rightArrowPressed) {\n      onActiveStepChange(Math.min(activeStep + 1, numSteps - 1));\n    }\n  }, [rightArrowPressed, numSteps, onActiveStepChange, activeStep]);\n\n  // Checks for scroll position\n  const [scrollYPosition, setScrollYPosition] = useState(0);\n  const handleScroll = () => {\n    const newScrollYPosition = window.pageYOffset;\n    setScrollYPosition(newScrollYPosition);\n  };\n  useEffect(() => {\n    window.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, []);\n\n  return (\n    <div className=\"absolute inset-0 pointer-events-none\">\n      <div className=\"absolute bottom-0 left-0 flex w-full gap-2 p-2\">\n        {/* Steps */}\n        {[...Array(numSteps).keys()].map((step) => (\n          <motion.div\n            key={step}\n            initial={{\n              backgroundColor: \"var(--color-gray-95)\",\n            }}\n            animate={{\n              backgroundColor:\n                step === activeStep\n                  ? \"var(--color-gray-70)\"\n                  : \"var(--color-gray-95)\",\n            }}\n            className=\"flex-1 h-2 rounded\"\n          />\n        ))}\n      </div>\n      {activeStep == numSteps - 1 &&(\n        <AnimatePresence>\n          {scrollYPosition < 20 && (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute left-0 flex flex-col items-center w-full gap-0 px-10 mt-8 bottom-8 animate-bounce\"\n            >\n              <div className=\"z-10\">\n                <Mouse color=\"#1E1C6F\" />\n              </div>\n              <div className=\"animation-ping absolute top-0 h-[40px] w-[40px] rounded-full bg-[#DFE1FA]\"></div>\n              <div className=\"z-10 text-[12px] font-semibold uppercase text-new-navy\">\n                Scroll Down\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      )}\n      {/* Prev button */}\n      <AnimatePresence>\n        {activeStep > 0 && (\n          <StepButton\n            key=\"prev-button\"\n            onClick={() => {\n              onActiveStepChange(activeStep - 1);\n            }}\n            className=\"left-2 md:left-5\"\n          >\n            <ChevronLeftIcon className=\"mr-1 size-8 sm:size-12\" />\n          </StepButton>\n        )}\n        {/* Next button */}\n        {activeStep < numSteps - 1 && (\n          <div className=\"absolute z-10 top-1/2 -translate-y-1/2 rounded-full size-16 shadow-[0_8px_12px_-4px_rgba(0,0,0,0.05)] bg-white grid place-items-center pointer-events-auto right-5\">\n            {activeStep < 1 && (\n              <div className=\"absolute z-0 inline-flex w-full h-full rounded-full bg-[#DFE1FA] animation-ping\"></div>\n            )}\n              <StepButton\n                key=\"next-button\"\n                onClick={() => {\n                  onActiveStepChange(activeStep + 1);\n                }}\n                className=\"right-0\"\n              >\n                  <ChevronRightIcon className=\"ml-1 size-8 sm:size-12\" />\n                  {activeStep == 0 && (\n                    <div id=\"tap-hint\" className=\"absolute right-0 hidden -bottom-14 sm:block md:-top-12\">\n                      <InteractionBubble className=\"flex items-center gap-2\">\n                        <div className=\"text-left text-new-navy\">\n                          <div className=\"st-directions-text w-[45px] text-[12px] font-semibold uppercase leading-3\">\n                            Tap to advance\n                          </div>\n                        </div>\n                        <div className=\"flex animation-wiggle\">\n                          <PointIcon className=\"size-8\" />\n                        </div>\n                      </InteractionBubble>\n                    </div>\n                  )}\n              </StepButton>\n          </div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\nconst StepButton = ({ onClick, className, children }) => {\n  return (\n    <motion.button\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      onClick={onClick}\n      className={cn(\n        \"absolute top-1/2 -translate-y-1/2 rounded-full size-16 shadow-[0_8px_12px_-4px_rgba(0,0,0,0.05)] bg-white grid place-items-center pointer-events-auto\",\n        className\n      )}\n    >\n      {children}\n    </motion.button>\n  );\n};\n\nexport default Stepper;\n","const WaveBackground = () => {\n  return (\n    <div id=\"wave-bg\" className=\"absolute -top-1 w-full h-[100vh] z-0 pointer-events-none left-0\">\n        <img\n            className=\"absolute top-0 left-0 w-full h-[100vh] opacity-[0.03]\"\n            src={`${process.env.PUBLIC_URL}/images/Wavyline_1_crop.png`}\n            alt=\"abstract faint blue lines in a wave pattern\"\n        />\n        <div className=\"absolute bottom-0 left-0 w-full h-[10vh] bg-gradient-to-t from-white\"></div>\n    </div>\n  )\n};\n\nexport default WaveBackground;","import { dates } from \"./data_bar\";\n\nconst steps = [\n  {\n    barsTranslateXInit: true,\n    highlightDates: [dates.at(-1)],\n    dateRange: [dates.length - 12, dates.length - 1],\n    showTickLabels: true,\n    showValues: true,\n    showAverageLine: false,\n  },\n  {\n    barsTranslateXInit: false,\n    // dateRange: [dates.length - 12, dates.length - 1],\n    dateRange: [dates.length - 6, dates.length - 1],\n    showTickLabels: true,\n    showValues: true,\n    showAverageLine: true,\n    // nonHighlightOpacity: 0,\n    // nonHighlightShow: false\n  },\n  {\n    dateRange: [0, 11],\n    showTickLabels: true,\n    showValues: true,\n    showAverageLine: false,\n  },\n  {\n    dateRange: [0, dates.length - 1],\n    showEvents: true,\n    showValues: true\n  },\n  {\n    dateRange: [0, dates.length - 1],\n    showEvents: true,\n    highlightDates: [dates[3], dates[7]],\n    showValues: true\n  },\n  {\n    dateRange: [0, dates.length - 1],\n    showEvents: true,\n    highlightDates: [dates[10]],\n    showValues: true\n  },\n  {\n    dateRange: [0, dates.length - 1],\n    showEvents: true,\n    highlightDates: [dates[10]],\n    showValues: true\n  },\n  {\n    dateRange: [0, dates.length - 1],\n    showEvents: true,\n    showValues: true\n  },\n];\n\nexport default steps;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The first date to check\n * @param dateRight - The second date to check\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n  return (\n    _dateLeft.getFullYear() === _dateRight.getFullYear() &&\n    _dateLeft.getMonth() === _dateRight.getMonth()\n  );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The first date to check\n * @param dateRight - The second date to check\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n  return _dateLeft.getFullYear() === _dateRight.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import * as React from 'react';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { createCollection } from '@radix-ui/react-collection';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\ntype SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top';\nconst BACK_KEYS: Record<SlideDirection, string[]> = {\n  'from-left': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n  'from-right': ['Home', 'PageDown', 'ArrowDown', 'ArrowRight'],\n  'from-bottom': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n  'from-top': ['Home', 'PageDown', 'ArrowUp', 'ArrowLeft'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Slider\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLIDER_NAME = 'Slider';\n\nconst [Collection, useCollection, createCollectionScope] =\n  createCollection<SliderThumbElement>(SLIDER_NAME);\n\ntype ScopedProps<P> = P & { __scopeSlider?: Scope };\nconst [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n  createCollectionScope,\n]);\n\ntype SliderContextValue = {\n  name?: string;\n  disabled?: boolean;\n  min: number;\n  max: number;\n  values: number[];\n  valueIndexToChangeRef: React.MutableRefObject<number>;\n  thumbs: Set<SliderThumbElement>;\n  orientation: SliderProps['orientation'];\n};\n\nconst [SliderProvider, useSliderContext] = createSliderContext<SliderContextValue>(SLIDER_NAME);\n\ntype SliderElement = SliderHorizontalElement | SliderVerticalElement;\ninterface SliderProps\n  extends Omit<\n    SliderHorizontalProps | SliderVerticalProps,\n    keyof SliderOrientationPrivateProps | 'defaultValue'\n  > {\n  name?: string;\n  disabled?: boolean;\n  orientation?: React.AriaAttributes['aria-orientation'];\n  dir?: Direction;\n  min?: number;\n  max?: number;\n  step?: number;\n  minStepsBetweenThumbs?: number;\n  value?: number[];\n  defaultValue?: number[];\n  onValueChange?(value: number[]): void;\n  onValueCommit?(value: number[]): void;\n  inverted?: boolean;\n}\n\nconst Slider = React.forwardRef<SliderElement, SliderProps>(\n  (props: ScopedProps<SliderProps>, forwardedRef) => {\n    const {\n      name,\n      min = 0,\n      max = 100,\n      step = 1,\n      orientation = 'horizontal',\n      disabled = false,\n      minStepsBetweenThumbs = 0,\n      defaultValue = [min],\n      value,\n      onValueChange = () => {},\n      onValueCommit = () => {},\n      inverted = false,\n      ...sliderProps\n    } = props;\n    const thumbRefs = React.useRef<SliderContextValue['thumbs']>(new Set());\n    const valueIndexToChangeRef = React.useRef<number>(0);\n    const isHorizontal = orientation === 'horizontal';\n    const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n\n    const [values = [], setValues] = useControllableState({\n      prop: value,\n      defaultProp: defaultValue,\n      onChange: (value) => {\n        const thumbs = [...thumbRefs.current];\n        thumbs[valueIndexToChangeRef.current]?.focus();\n        onValueChange(value);\n      },\n    });\n    const valuesBeforeSlideStartRef = React.useRef(values);\n\n    function handleSlideStart(value: number) {\n      const closestIndex = getClosestValueIndex(values, value);\n      updateValues(value, closestIndex);\n    }\n\n    function handleSlideMove(value: number) {\n      updateValues(value, valueIndexToChangeRef.current);\n    }\n\n    function handleSlideEnd() {\n      const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n      const nextValue = values[valueIndexToChangeRef.current];\n      const hasChanged = nextValue !== prevValue;\n      if (hasChanged) onValueCommit(values);\n    }\n\n    function updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n      const decimalCount = getDecimalCount(step);\n      const snapToStep = roundValue(Math.round((value - min) / step) * step + min, decimalCount);\n      const nextValue = clamp(snapToStep, [min, max]);\n\n      setValues((prevValues = []) => {\n        const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n        if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n          valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n          const hasChanged = String(nextValues) !== String(prevValues);\n          if (hasChanged && commit) onValueCommit(nextValues);\n          return hasChanged ? nextValues : prevValues;\n        } else {\n          return prevValues;\n        }\n      });\n    }\n\n    return (\n      <SliderProvider\n        scope={props.__scopeSlider}\n        name={name}\n        disabled={disabled}\n        min={min}\n        max={max}\n        valueIndexToChangeRef={valueIndexToChangeRef}\n        thumbs={thumbRefs.current}\n        values={values}\n        orientation={orientation}\n      >\n        <Collection.Provider scope={props.__scopeSlider}>\n          <Collection.Slot scope={props.__scopeSlider}>\n            <SliderOrientation\n              aria-disabled={disabled}\n              data-disabled={disabled ? '' : undefined}\n              {...sliderProps}\n              ref={forwardedRef}\n              onPointerDown={composeEventHandlers(sliderProps.onPointerDown, () => {\n                if (!disabled) valuesBeforeSlideStartRef.current = values;\n              })}\n              min={min}\n              max={max}\n              inverted={inverted}\n              onSlideStart={disabled ? undefined : handleSlideStart}\n              onSlideMove={disabled ? undefined : handleSlideMove}\n              onSlideEnd={disabled ? undefined : handleSlideEnd}\n              onHomeKeyDown={() => !disabled && updateValues(min, 0, { commit: true })}\n              onEndKeyDown={() =>\n                !disabled && updateValues(max, values.length - 1, { commit: true })\n              }\n              onStepKeyDown={({ event, direction: stepDirection }) => {\n                if (!disabled) {\n                  const isPageKey = PAGE_KEYS.includes(event.key);\n                  const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key));\n                  const multiplier = isSkipKey ? 10 : 1;\n                  const atIndex = valueIndexToChangeRef.current;\n                  const value = values[atIndex];\n                  const stepInDirection = step * multiplier * stepDirection;\n                  updateValues(value + stepInDirection, atIndex, { commit: true });\n                }\n              }}\n            />\n          </Collection.Slot>\n        </Collection.Provider>\n      </SliderProvider>\n    );\n  }\n);\n\nSlider.displayName = SLIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderHorizontal\n * -----------------------------------------------------------------------------------------------*/\n\ntype Side = 'top' | 'right' | 'bottom' | 'left';\n\nconst [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext<{\n  startEdge: Side;\n  endEdge: Side;\n  size: keyof NonNullable<ReturnType<typeof useSize>>;\n  direction: number;\n}>(SLIDER_NAME, {\n  startEdge: 'left',\n  endEdge: 'right',\n  size: 'width',\n  direction: 1,\n});\n\ntype SliderOrientationPrivateProps = {\n  min: number;\n  max: number;\n  inverted: boolean;\n  onSlideStart?(value: number): void;\n  onSlideMove?(value: number): void;\n  onSlideEnd?(): void;\n  onHomeKeyDown(event: React.KeyboardEvent): void;\n  onEndKeyDown(event: React.KeyboardEvent): void;\n  onStepKeyDown(step: { event: React.KeyboardEvent; direction: number }): void;\n};\ninterface SliderOrientationProps\n  extends Omit<SliderImplProps, keyof SliderImplPrivateProps>,\n    SliderOrientationPrivateProps {}\n\ntype SliderHorizontalElement = SliderImplElement;\ninterface SliderHorizontalProps extends SliderOrientationProps {\n  dir?: Direction;\n}\n\nconst SliderHorizontal = React.forwardRef<SliderHorizontalElement, SliderHorizontalProps>(\n  (props: ScopedProps<SliderHorizontalProps>, forwardedRef) => {\n    const {\n      min,\n      max,\n      dir,\n      inverted,\n      onSlideStart,\n      onSlideMove,\n      onSlideEnd,\n      onStepKeyDown,\n      ...sliderProps\n    } = props;\n    const [slider, setSlider] = React.useState<SliderImplElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setSlider(node));\n    const rectRef = React.useRef<ClientRect>();\n    const direction = useDirection(dir);\n    const isDirectionLTR = direction === 'ltr';\n    const isSlidingFromLeft = (isDirectionLTR && !inverted) || (!isDirectionLTR && inverted);\n\n    function getValueFromPointer(pointerPosition: number) {\n      const rect = rectRef.current || slider!.getBoundingClientRect();\n      const input: [number, number] = [0, rect.width];\n      const output: [number, number] = isSlidingFromLeft ? [min, max] : [max, min];\n      const value = linearScale(input, output);\n\n      rectRef.current = rect;\n      return value(pointerPosition - rect.left);\n    }\n\n    return (\n      <SliderOrientationProvider\n        scope={props.__scopeSlider}\n        startEdge={isSlidingFromLeft ? 'left' : 'right'}\n        endEdge={isSlidingFromLeft ? 'right' : 'left'}\n        direction={isSlidingFromLeft ? 1 : -1}\n        size=\"width\"\n      >\n        <SliderImpl\n          dir={direction}\n          data-orientation=\"horizontal\"\n          {...sliderProps}\n          ref={composedRefs}\n          style={{\n            ...sliderProps.style,\n            ['--radix-slider-thumb-transform' as any]: 'translateX(-50%)',\n          }}\n          onSlideStart={(event) => {\n            const value = getValueFromPointer(event.clientX);\n            onSlideStart?.(value);\n          }}\n          onSlideMove={(event) => {\n            const value = getValueFromPointer(event.clientX);\n            onSlideMove?.(value);\n          }}\n          onSlideEnd={() => {\n            rectRef.current = undefined;\n            onSlideEnd?.();\n          }}\n          onStepKeyDown={(event) => {\n            const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n            const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n            onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n          }}\n        />\n      </SliderOrientationProvider>\n    );\n  }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderVertical\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderVerticalElement = SliderImplElement;\ninterface SliderVerticalProps extends SliderOrientationProps {}\n\nconst SliderVertical = React.forwardRef<SliderVerticalElement, SliderVerticalProps>(\n  (props: ScopedProps<SliderVerticalProps>, forwardedRef) => {\n    const {\n      min,\n      max,\n      inverted,\n      onSlideStart,\n      onSlideMove,\n      onSlideEnd,\n      onStepKeyDown,\n      ...sliderProps\n    } = props;\n    const sliderRef = React.useRef<SliderImplElement>(null);\n    const ref = useComposedRefs(forwardedRef, sliderRef);\n    const rectRef = React.useRef<ClientRect>();\n    const isSlidingFromBottom = !inverted;\n\n    function getValueFromPointer(pointerPosition: number) {\n      const rect = rectRef.current || sliderRef.current!.getBoundingClientRect();\n      const input: [number, number] = [0, rect.height];\n      const output: [number, number] = isSlidingFromBottom ? [max, min] : [min, max];\n      const value = linearScale(input, output);\n\n      rectRef.current = rect;\n      return value(pointerPosition - rect.top);\n    }\n\n    return (\n      <SliderOrientationProvider\n        scope={props.__scopeSlider}\n        startEdge={isSlidingFromBottom ? 'bottom' : 'top'}\n        endEdge={isSlidingFromBottom ? 'top' : 'bottom'}\n        size=\"height\"\n        direction={isSlidingFromBottom ? 1 : -1}\n      >\n        <SliderImpl\n          data-orientation=\"vertical\"\n          {...sliderProps}\n          ref={ref}\n          style={{\n            ...sliderProps.style,\n            ['--radix-slider-thumb-transform' as any]: 'translateY(50%)',\n          }}\n          onSlideStart={(event) => {\n            const value = getValueFromPointer(event.clientY);\n            onSlideStart?.(value);\n          }}\n          onSlideMove={(event) => {\n            const value = getValueFromPointer(event.clientY);\n            onSlideMove?.(value);\n          }}\n          onSlideEnd={() => {\n            rectRef.current = undefined;\n            onSlideEnd?.();\n          }}\n          onStepKeyDown={(event) => {\n            const slideDirection = isSlidingFromBottom ? 'from-bottom' : 'from-top';\n            const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n            onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n          }}\n        />\n      </SliderOrientationProvider>\n    );\n  }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderImpl\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderImplElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ntype SliderImplPrivateProps = {\n  onSlideStart(event: React.PointerEvent): void;\n  onSlideMove(event: React.PointerEvent): void;\n  onSlideEnd(event: React.PointerEvent): void;\n  onHomeKeyDown(event: React.KeyboardEvent): void;\n  onEndKeyDown(event: React.KeyboardEvent): void;\n  onStepKeyDown(event: React.KeyboardEvent): void;\n};\ninterface SliderImplProps extends PrimitiveDivProps, SliderImplPrivateProps {}\n\nconst SliderImpl = React.forwardRef<SliderImplElement, SliderImplProps>(\n  (props: ScopedProps<SliderImplProps>, forwardedRef) => {\n    const {\n      __scopeSlider,\n      onSlideStart,\n      onSlideMove,\n      onSlideEnd,\n      onHomeKeyDown,\n      onEndKeyDown,\n      onStepKeyDown,\n      ...sliderProps\n    } = props;\n    const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n\n    return (\n      <Primitive.span\n        {...sliderProps}\n        ref={forwardedRef}\n        onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n          if (event.key === 'Home') {\n            onHomeKeyDown(event);\n            // Prevent scrolling to page start\n            event.preventDefault();\n          } else if (event.key === 'End') {\n            onEndKeyDown(event);\n            // Prevent scrolling to page end\n            event.preventDefault();\n          } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n            onStepKeyDown(event);\n            // Prevent scrolling for directional key presses\n            event.preventDefault();\n          }\n        })}\n        onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n          const target = event.target as HTMLElement;\n          target.setPointerCapture(event.pointerId);\n          // Prevent browser focus behaviour because we focus a thumb manually when values change.\n          event.preventDefault();\n          // Touch devices have a delay before focusing so won't focus if touch immediately moves\n          // away from target (sliding). We want thumb to focus regardless.\n          if (context.thumbs.has(target)) {\n            target.focus();\n          } else {\n            onSlideStart(event);\n          }\n        })}\n        onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n          const target = event.target as HTMLElement;\n          if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n        })}\n        onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n          const target = event.target as HTMLElement;\n          if (target.hasPointerCapture(event.pointerId)) {\n            target.releasePointerCapture(event.pointerId);\n            onSlideEnd(event);\n          }\n        })}\n      />\n    );\n  }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderTrack\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRACK_NAME = 'SliderTrack';\n\ntype SliderTrackElement = React.ElementRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SliderTrackProps extends PrimitiveSpanProps {}\n\nconst SliderTrack = React.forwardRef<SliderTrackElement, SliderTrackProps>(\n  (props: ScopedProps<SliderTrackProps>, forwardedRef) => {\n    const { __scopeSlider, ...trackProps } = props;\n    const context = useSliderContext(TRACK_NAME, __scopeSlider);\n    return (\n      <Primitive.span\n        data-disabled={context.disabled ? '' : undefined}\n        data-orientation={context.orientation}\n        {...trackProps}\n        ref={forwardedRef}\n      />\n    );\n  }\n);\n\nSliderTrack.displayName = TRACK_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderRange\n * -----------------------------------------------------------------------------------------------*/\n\nconst RANGE_NAME = 'SliderRange';\n\ntype SliderRangeElement = React.ElementRef<typeof Primitive.span>;\ninterface SliderRangeProps extends PrimitiveSpanProps {}\n\nconst SliderRange = React.forwardRef<SliderRangeElement, SliderRangeProps>(\n  (props: ScopedProps<SliderRangeProps>, forwardedRef) => {\n    const { __scopeSlider, ...rangeProps } = props;\n    const context = useSliderContext(RANGE_NAME, __scopeSlider);\n    const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n    const ref = React.useRef<HTMLSpanElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    const valuesCount = context.values.length;\n    const percentages = context.values.map((value) =>\n      convertValueToPercentage(value, context.min, context.max)\n    );\n    const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n    const offsetEnd = 100 - Math.max(...percentages);\n\n    return (\n      <Primitive.span\n        data-orientation={context.orientation}\n        data-disabled={context.disabled ? '' : undefined}\n        {...rangeProps}\n        ref={composedRefs}\n        style={{\n          ...props.style,\n          [orientation.startEdge]: offsetStart + '%',\n          [orientation.endEdge]: offsetEnd + '%',\n        }}\n      />\n    );\n  }\n);\n\nSliderRange.displayName = RANGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SliderThumb';\n\ntype SliderThumbElement = SliderThumbImplElement;\ninterface SliderThumbProps extends Omit<SliderThumbImplProps, 'index'> {}\n\nconst SliderThumb = React.forwardRef<SliderThumbElement, SliderThumbProps>(\n  (props: ScopedProps<SliderThumbProps>, forwardedRef) => {\n    const getItems = useCollection(props.__scopeSlider);\n    const [thumb, setThumb] = React.useState<SliderThumbImplElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n    const index = React.useMemo(\n      () => (thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1),\n      [getItems, thumb]\n    );\n    return <SliderThumbImpl {...props} ref={composedRefs} index={index} />;\n  }\n);\n\ntype SliderThumbImplElement = React.ElementRef<typeof Primitive.span>;\ninterface SliderThumbImplProps extends PrimitiveSpanProps {\n  index: number;\n  name?: string;\n}\n\nconst SliderThumbImpl = React.forwardRef<SliderThumbImplElement, SliderThumbImplProps>(\n  (props: ScopedProps<SliderThumbImplProps>, forwardedRef) => {\n    const { __scopeSlider, index, name, ...thumbProps } = props;\n    const context = useSliderContext(THUMB_NAME, __scopeSlider);\n    const orientation = useSliderOrientationContext(THUMB_NAME, __scopeSlider);\n    const [thumb, setThumb] = React.useState<HTMLSpanElement | null>(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n    // We set this to true by default so that events bubble to forms without JS (SSR)\n    const isFormControl = thumb ? Boolean(thumb.closest('form')) : true;\n    const size = useSize(thumb);\n    // We cast because index could be `-1` which would return undefined\n    const value = context.values[index] as number | undefined;\n    const percent =\n      value === undefined ? 0 : convertValueToPercentage(value, context.min, context.max);\n    const label = getLabel(index, context.values.length);\n    const orientationSize = size?.[orientation.size];\n    const thumbInBoundsOffset = orientationSize\n      ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction)\n      : 0;\n\n    React.useEffect(() => {\n      if (thumb) {\n        context.thumbs.add(thumb);\n        return () => {\n          context.thumbs.delete(thumb);\n        };\n      }\n    }, [thumb, context.thumbs]);\n\n    return (\n      <span\n        style={{\n          transform: 'var(--radix-slider-thumb-transform)',\n          position: 'absolute',\n          [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`,\n        }}\n      >\n        <Collection.ItemSlot scope={props.__scopeSlider}>\n          <Primitive.span\n            role=\"slider\"\n            aria-label={props['aria-label'] || label}\n            aria-valuemin={context.min}\n            aria-valuenow={value}\n            aria-valuemax={context.max}\n            aria-orientation={context.orientation}\n            data-orientation={context.orientation}\n            data-disabled={context.disabled ? '' : undefined}\n            tabIndex={context.disabled ? undefined : 0}\n            {...thumbProps}\n            ref={composedRefs}\n            /**\n             * There will be no value on initial render while we work out the index so we hide thumbs\n             * without a value, otherwise SSR will render them in the wrong position before they\n             * snap into the correct position during hydration which would be visually jarring for\n             * slower connections.\n             */\n            style={value === undefined ? { display: 'none' } : props.style}\n            onFocus={composeEventHandlers(props.onFocus, () => {\n              context.valueIndexToChangeRef.current = index;\n            })}\n          />\n        </Collection.ItemSlot>\n\n        {isFormControl && (\n          <BubbleInput\n            key={index}\n            name={\n              name ??\n              (context.name ? context.name + (context.values.length > 1 ? '[]' : '') : undefined)\n            }\n            value={value}\n          />\n        )}\n      </span>\n    );\n  }\n);\n\nSliderThumb.displayName = THUMB_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst BubbleInput = (props: React.ComponentPropsWithoutRef<'input'>) => {\n  const { value, ...inputProps } = props;\n  const ref = React.useRef<HTMLInputElement>(null);\n  const prevValue = usePrevious(value);\n\n  // Bubble value change to parents (e.g form change event)\n  React.useEffect(() => {\n    const input = ref.current!;\n    const inputProto = window.HTMLInputElement.prototype;\n    const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor;\n    const setValue = descriptor.set;\n    if (prevValue !== value && setValue) {\n      const event = new Event('input', { bubbles: true });\n      setValue.call(input, value);\n      input.dispatchEvent(event);\n    }\n  }, [prevValue, value]);\n\n  /**\n   * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n   * wrap it will not be able to access its value via the FormData API.\n   *\n   * We purposefully do not add the `value` attribute here to allow the value\n   * to be set programatically and bubble to any parent form `onChange` event.\n   * Adding the `value` will cause React to consider the programatic\n   * dispatch a duplicate and it will get swallowed.\n   */\n  return <input style={{ display: 'none' }} {...inputProps} ref={ref} defaultValue={value} />;\n};\n\nfunction getNextSortedValues(prevValues: number[] = [], nextValue: number, atIndex: number) {\n  const nextValues = [...prevValues];\n  nextValues[atIndex] = nextValue;\n  return nextValues.sort((a, b) => a - b);\n}\n\nfunction convertValueToPercentage(value: number, min: number, max: number) {\n  const maxSteps = max - min;\n  const percentPerStep = 100 / maxSteps;\n  const percentage = percentPerStep * (value - min);\n  return clamp(percentage, [0, 100]);\n}\n\n/**\n * Returns a label for each thumb when there are two or more thumbs\n */\nfunction getLabel(index: number, totalValues: number) {\n  if (totalValues > 2) {\n    return `Value ${index + 1} of ${totalValues}`;\n  } else if (totalValues === 2) {\n    return ['Minimum', 'Maximum'][index];\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Given a `values` array and a `nextValue`, determine which value in\n * the array is closest to `nextValue` and return its index.\n *\n * @example\n * // returns 1\n * getClosestValueIndex([10, 30], 25);\n */\nfunction getClosestValueIndex(values: number[], nextValue: number) {\n  if (values.length === 1) return 0;\n  const distances = values.map((value) => Math.abs(value - nextValue));\n  const closestDistance = Math.min(...distances);\n  return distances.indexOf(closestDistance);\n}\n\n/**\n * Offsets the thumb centre point while sliding to ensure it remains\n * within the bounds of the slider when reaching the edges\n */\nfunction getThumbInBoundsOffset(width: number, left: number, direction: number) {\n  const halfWidth = width / 2;\n  const halfPercent = 50;\n  const offset = linearScale([0, halfPercent], [0, halfWidth]);\n  return (halfWidth - offset(left) * direction) * direction;\n}\n\n/**\n * Gets an array of steps between each value.\n *\n * @example\n * // returns [1, 9]\n * getStepsBetweenValues([10, 11, 20]);\n */\nfunction getStepsBetweenValues(values: number[]) {\n  return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\n\n/**\n * Verifies the minimum steps between all values is greater than or equal\n * to the expected minimum steps.\n *\n * @example\n * // returns false\n * hasMinStepsBetweenValues([1,2,3], 2);\n *\n * @example\n * // returns true\n * hasMinStepsBetweenValues([1,2,3], 1);\n */\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number) {\n  if (minStepsBetweenValues > 0) {\n    const stepsBetweenValues = getStepsBetweenValues(values);\n    const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n    return actualMinStepsBetweenValues >= minStepsBetweenValues;\n  }\n  return true;\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n  return (value: number) => {\n    if (input[0] === input[1] || output[0] === output[1]) return output[0];\n    const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n    return output[0] + ratio * (value - input[0]);\n  };\n}\n\nfunction getDecimalCount(value: number) {\n  return (String(value).split('.')[1] || '').length;\n}\n\nfunction roundValue(value: number, decimalCount: number) {\n  const rounder = Math.pow(10, decimalCount);\n  return Math.round(value * rounder) / rounder;\n}\n\nconst Root = Slider;\nconst Track = SliderTrack;\nconst Range = SliderRange;\nconst Thumb = SliderThumb;\n\nexport {\n  createSliderScope,\n  //\n  Slider,\n  SliderTrack,\n  SliderRange,\n  SliderThumb,\n  //\n  Root,\n  Track,\n  Range,\n  Thumb,\n};\nexport type { SliderProps, SliderTrackProps, SliderRangeProps, SliderThumbProps };\n","\n\nimport * as React from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\n\nimport { cn } from \"@/lib/utils\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport { dates } from \"@/data/data_bar\";\n\nconst Slider = React.forwardRef(\n  ({ className, disable = false, ...props }, ref) => {\n    const initialValue = Array.isArray(props.value)\n      ? props.value\n      : [props.min, props.max];\n\n    return (\n      <SliderPrimitive.Root\n        ref={ref}\n        className={cn(\n          \"relative flex w-full touch-none select-none items-center cursor-pointer\",\n          disable ? \"pointer-events-none\" : \"\",\n          className\n        )}\n        {...props}\n      >\n        {/* Track */}\n        <SliderPrimitive.Track className=\"relative w-full grow overflow-visible rounded-full border-dashed border-[0.5px] border-gray-90\">\n          <SliderPrimitive.Range className=\"absolute h-[40px] bg-[#F0F1FD] -translate-y-1/2 grid place-items-center -translate-x-[1px]\">\n            <div className=\"w-full bg-gray-10 h-[2px]\"></div>\n          </SliderPrimitive.Range>\n        </SliderPrimitive.Track>\n        {/* Annotations */}\n        <div className=\"absolute left-0 h-[10px] w-[1.5px] bg-gray-10\" />\n        <div className=\"absolute right-0 h-[10px] w-[1.5px] bg-gray-10\" />\n        <div\n          className=\"absolute h-[10px] w-[1.5px] bg-gray-10\"\n          style={{\n            left: `${(12 / dates.length) * 100}%`,\n          }}\n        />\n        <span className=\"absolute left-0 text-gray-40 text-[12px] translate-y-[30px] -translate-x-1/2 \">\n          2023\n        </span>\n        <span\n          className={cn(\n            \"absolute text-gray-40 text-[12px] translate-y-[30px] -translate-x-1/2\"\n          )}\n          style={{\n            left: `${(12 / dates.length) * 100}%`,\n          }}\n        >\n          2024\n        </span>\n        {/* <span className=\"absolute right-0 text-gray-40 text-[12px] translate-y-[30px] translate-x-1/2 \">\n          2025\n        </span> */}\n        {/* Thumbs */}\n        {!disable &&\n          initialValue.map((value, index) => (\n            <React.Fragment key={index}>\n              {index === 0 && (\n                <SliderPrimitive.Thumb className=\"grid -translate-x-2 rounded size-5 bg-gray-10 place-items-center\">\n                  <ChevronLeftIcon className=\"text-white size-4 stroke-[3px] stroke-white\" />\n                </SliderPrimitive.Thumb>\n              )}\n              {index === 1 && (\n                <SliderPrimitive.Thumb className=\"grid translate-x-2 rounded size-5 bg-gray-10 place-items-center\">\n                  <ChevronRightIcon className=\"text-white size-4 stroke-[3px] stroke-white\" />\n                </SliderPrimitive.Thumb>\n              )}\n            </React.Fragment>\n          ))}\n      </SliderPrimitive.Root>\n    );\n  }\n);\nSlider.displayName = SliderPrimitive.Root.displayName;\n\nexport { Slider };\n","\n\nimport { dates } from \"@/data/data_bar\";\nimport { Slider } from \"./Slider\";\n\nconst DateSlider = ({ value, onValueChange, disable = false }) => {\n  return (\n    <div className=\"grid h-[90px] gap-4 p-4 px-6 w-[200px]\">\n      {/* <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n        Date\n      </label> */}\n      <Slider\n        // defaultValue={[dates.indexOf(value[0]), dates.indexOf(value[1])]}\n        value={value}\n        minStepsBetweenThumbs={1}\n        max={dates.length - 1}\n        // Two years worth\n        // max={23}\n        min={0}\n        step={1}\n        onValueChange={([v1, v2]) => {\n          onValueChange([v1, Math.min(v2, dates.length - 1)]);\n        }}\n        className={\"w-full\"}\n        disable={disable}\n      />\n      {/* <div className=\"flex gap-2 flex-wrap\">\n        <ol className=\"flex items-center w-full gap-3\">\n          {value.map((_, index) => (\n            <li\n              key={index}\n              className=\"flex items-center justify-between w-full border px-3 h-10 rounded-md\"\n            >\n              <span>{value[index]}</span>\n            </li>\n          ))}\n        </ol>\n      </div> */}\n    </div>\n  );\n};\n\nexport default DateSlider;\n","import { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useState } from \"react\";\nimport { Mouse } from \"lucide-react\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport copy from \"@/data/copy.json\";\nimport { useContext, useMemo } from \"react\";\nimport { DataContext } from \"@/src/App\";\nimport { abToState } from \"@/data/states\";\nimport timeline from \"@/data/data_state_timeline.json\";\nimport Interpolate from \"@doist/react-interpolate\";\nimport { format } from \"date-fns\";\nimport { dates } from \"@/data/data_bar\";\n\nconst StepperText = ({ activeStep, state, showEventInteractionBubble }) => {\n  const { last6MonthsAbortionsAvg, totalAbortions2023, stepMap } =\n    useContext(DataContext);\n\n  const stateTimeline = useMemo(() => {\n    return timeline.find((d) => d.state === state);\n  }, [state]);\n\n  const step1Html = copy.slides[1].text\n    .replace(\"[XX,XXX]\", formatY(last6MonthsAbortionsAvg))\n    .replace(\n      \"[the United States/State]\",\n      state === \"US\" ? \"<strong>US states without a total ban</strong>\" : `<strong>${abToState[state]}</strong>`,\n    );\n\n  const step2Html = copy.slides[2].text\n    .replace(\"[X,XXX,XXX]\", formatY(totalAbortions2023))\n    .replace(\n      \"[the United States/State]\",\n      state === \"US\" ? \"<strong>US states without a total ban</strong>\" : `<strong>${abToState[state]}</strong>`,\n    );\n\n  const step3Html = copy.slides[3].text.replace(\n    \"<span id=intro_events>key policy changes</span>\",\n    `<span style=\"display: inline-block; height: 18px; width: 18px; background-color: var(--color-new-highlighter); border-radius: 100%; border: 3px solid; margin-right: 6px;\"></span>key policy changes`,\n  );\n\n  return (\n    // <div className=\"absolute bottom-0 left-[50%] mx-auto w-full max-w-7xl -translate-x-1/2 translate-y-full p-4 text-lg md:p-10 md:text-2xl\">\n    <AnimatePresence mode=\"wait\">\n      {stepMap[activeStep] === 1 && (\n        <MotionText key={activeStep} html={step1Html}></MotionText>\n      )}\n      {stepMap[activeStep] === 2 && (\n        <MotionText key={activeStep} html={step2Html}></MotionText>\n      )}\n      {stepMap[activeStep] === 3 && (\n        <>\n          <MotionText key={activeStep} html={step3Html}></MotionText>\n          {/* <div className=\"absolute right-10 top-0 -translate-y-full\">\n            <AnimatePresence>\n              {showEventInteractionBubble && (\n                <InteractionBubble className=\"flex w-[160px] gap-2\">\n                  <div className=\"flex-none\">\n                    <PointIcon />\n                  </div>\n                  <div className=\"text-new-navy\">\n                    <div className=\"text-lg font-semibold uppercase leading-6\">\n                      See more details\n                    </div>\n                  </div>\n                </InteractionBubble>\n              )}\n            </AnimatePresence>\n          </div> */}\n        </>\n      )}\n      {stepMap[activeStep] === 4 && (\n        <MotionText\n          key={activeStep}\n          html={stateTimeline[`point${1}_text`]}\n        ></MotionText>\n      )}\n      {stepMap[activeStep] === 5 && (\n        <MotionText\n          key={activeStep}\n          html={stateTimeline[`point${2}_text`]}\n        ></MotionText>\n      )}\n      {stepMap[activeStep] === 6 && (\n        <MotionText\n          key={activeStep}\n          html={stateTimeline[`point${3}_text`]}\n        ></MotionText>\n      )}\n      {stepMap[activeStep] === 7 && (\n        <>\n          <MotionText\n            key={activeStep}\n            // html={copy.slides[7].text}\n          >\n            <Interpolate\n              string={copy.slides[7].text}\n              mapping={{\n                endDate: format(dates.at(-1), \"MMMM yyyy\"),\n                linkTheEstimates: <IntroItem i={1} href={\"#the-estimates\"} />,\n                linkMapHeadline: <IntroItem i={2} href=\"#map-headline\" />,\n                linkSlopeHeadline: <IntroItem i={3} href=\"#slope-headline\" />,\n              }}\n            />\n          </MotionText>\n        </>\n      )}\n    </AnimatePresence>\n    // </div>\n  );\n};\n\nfunction IntroItem({ i, href, children }) {\n  return (\n    <a href={href} className=\"inline-block cursor-pointer\">\n      {/* <span className=\"inline-block\">\n        <span className=\"grid size-5 -translate-y-[2px] place-content-center rounded-full bg-[#DFE1FA] text-sm text-new-navy\">\n          {i}\n        </span>\n      </span>{\" \"} */}\n      <span className=\"underline\">{children}</span>\n    </a>\n  );\n}\n\n// function MotionText({ html, children }) {\n//   return (\n//     <motion.div\n//       initial={{ opacity: 0 }}\n//       animate={{ opacity: 1 }}\n//       exit={{ opacity: 0 }}\n//       dangerouslySetInnerHTML={{ __html: html }}\n//       className=\"\"\n//     >\n//       {children}\n//     </motion.div>\n//   );\n// }\nfunction MotionText({ html, children }) {\n  if (html) {\n    return (\n      <motion.div\n        initial={{ opacity: 0 }}\n        animate={{ opacity: 1 }}\n        exit={{ opacity: 0 }}\n        dangerouslySetInnerHTML={{ __html: html }}\n        className=\"\"\n      />\n    );\n  }\n\n  return (\n    <motion.div\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      className=\"\"\n    >\n      {children}\n    </motion.div>\n  );\n}\n\nfunction formatY(value) {\n  // return new Intl.NumberFormat(\"en-US\").format(Math.ceil(value / 100) * 100);\n  return new Intl.NumberFormat(\"en-US\").format(Math.round(value / 10) * 10);\n}\n\nexport default StepperText;\n","/* eslint-disable eqeqeq */\nimport React from \"react\";\nimport StateSelect from \"./StateSelect\";\nimport { ChevronsRight, Link } from \"lucide-react\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport copy from \"@/data/copy.json\";\nimport { format } from \"date-fns\";\nimport data, { dates } from \"@/data/data_bar\";\nimport { abToState } from \"@/data/states\";\n\nconst OpeningText = ({ state, setState, hasTotalBan, refMap }) => {\n  // console.log({refMap})\n  const handleScrollClick = () => {\n    refMap.current?.scrollIntoView({behavior: 'instant'});\n  }\n\n  function indianaCheck(hasTotalBan, state) {\n    let check = !hasTotalBan ? true : hasTotalBan && state ==\"IN\" ? true : false\n    return check;\n  }\n  return (\n    <>\n      {/* FIXME: Grab from copy */}\n      {hasTotalBan && state !== \"IN\" && (\n        <div className=\"absolute left-0 -top-[55px] line w-full h-4 border-b-black border-b-[3px]\"></div>\n      )}\n      <div className=\"max-w-[800px] mx-auto text-lg md:text-2xl\">\n        {indianaCheck(hasTotalBan, state) ? (\n          <>\n            In {format(dates.at(-1), \"MMMM\")}, an estimated\n            <span className=\"text-lg font-bold md:text-2xl\">\n              {\" \"}\n              {formatY(\n                data.find((d) => d.state === state && d.date === dates.at(-1))\n                  .nat50,\n              )}{\" \"}\n            </span>\n            clinician-provided abortions took place in {state === \"US\" && \"the \"}\n            <span><strong>{abToState[state]}</strong></span>\n            <span>\n              {formatCaveat(\n                data.find((d) => d.state === state && d.date === dates.at(-1))\n                  .state,\n              )}{\" \"}\n            </span>\n          </>\n        ) : (\n          <>\n            {\n              // Exception for Missouri\n              state == \"MO\" ? (\n                <span>In December 2024, <strong>{abToState[state]}’s</strong> total abortion ban was blocked following the approval of an amendment to the state constitution establishing the right to abortion. However, because access to abortion is still highly restricted in the state, we are not currently publishing state-level estimates for <strong>{abToState[state]}</strong>.</span>\n              ) : ''}\n              {\n              // Exception for North Dakota\n              state == \"ND\" ? (\n                <span>In September 2024, <strong>{abToState[state]}’s</strong> total abortion ban was repealed. Because the state has no abortion providers and litigation over the ban’s repeal is ongoing, we are not currently publishing state-level estimates for <strong>{abToState[state]}</strong>. </span>\n              ) : ''}\n            {state == \"IN\" ? (\n              <span>\n                Abortion is currently banned, with very limited exceptions in <strong>{abToState[state]}</strong>.\n              </span>\n            ) : ''}\n            {state !== \"IN\" && state !== \"MO\" && state !== \"ND\" ? (\n              <span>\n                Abortion has been banned, with very limited exceptions, in <strong>{abToState[state]}</strong> since <i>Roe v. Wade</i> was overturned.\n              </span>\n            ) : ''}\n            <div className=\"text-xs leading-2\">\n              { state !== 'MO' && state !== 'ND'? <p className=\"py-4\">{copy.slides[0].banTextSecondary}</p> : <p>&nbsp;</p>}\n              <div className=\"flex flex-row flex-wrap gap-4\">\n                <a\n                    onClick={handleScrollClick}\n                    // href=\"#flow-map\"\n                    className=\"inline-block px-2 py-2 pl-4 text-xs font-medium text-white no-underline rounded-full cursor-pointer min-w-max bg-new-navy hover:underline hover:bg-new-violet-blue hover:text-white\"\n                  >\n                    <div className=\"flex items-center gap-1 font-medium\">\n                      See where {abToState[state]} patients travel out-of-state\n                      <ChevronsRight className=\"size-4\" />\n                    </div>\n                  </a>\n                  <a\n                    href={`https://states.guttmacher.org/policies/${abToState[\n                      state\n                    ].toLowerCase()}/abortion-policies`}\n                    target=\"_blank\"\n                    className=\"inline-block min-w-max rounded-full bg-[#F0F1FD] px-4 py-2 text-xs font-medium text-new-navy no-underline hover:underline hover:bg-new-violet-blue hover:text-white\" rel=\"noreferrer\"\n                  >\n                    <div className=\"flex items-center gap-2 font-medium\">\n                      Learn more about the policies in {abToState[state]}\n                      <Link className=\"size-3\" />\n                    </div>\n                  </a>\n              </div>\n            </div>\n          </>\n        )}\n      </div>\n    </>\n  );\n};\n\nfunction formatY(value) {\n  // return new Intl.NumberFormat(\"en-US\").format(Math.ceil(value / 100) * 100);\n  return new Intl.NumberFormat(\"en-US\").format(Math.round(value / 10) * 10);\n}\n\nfunction formatCaveat(value) {\n  const caveat = value == \"US\" ? \" in states without total bans.\" : \".\";\n  return caveat;\n}\n\nexport default OpeningText;\n","import { dates } from \"@/data/data_bar\";\nimport MonthlyChart from \"./MonthlyChart\";\nimport DateSlider from \"./DateSlider\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport StateSelect from \"./StateSelect\";\nimport InteractionBubble from \"./InteractionBubble\";\nimport PointIcon from \"./PointIcon\";\nimport StepperText from \"./StepperText\";\nimport OpeningText from \"./OpeningText\";\nimport useMeasure from \"react-use-measure\";\nimport { useMediaQuery } from \"react-responsive\";\n\nfunction toggleWiggle() {\n  const el = document.getElementById(\"control-wiggle\");\n  if (el !== null) {\n    el.classList.remove(\"animation-wiggle\");\n  }\n}\n\nconst OpenerDesktop = ({\n  refMap,\n  hasTotalBan,\n  state,\n  setState,\n  stepProps,\n  dateRange,\n  setDateRange,\n  showEventInteractionBubble,\n  setShowEventInteractionBubble,\n  activeStep,\n  setActiveStep,\n  finalStep,\n  numSteps,\n}) => {\n\n  const [containerRef, { width, height }] = useMeasure();\n\n  const isSmallScreen = useMediaQuery({ query: \"(max-width: 768px)\" });\n\n  return (\n    <div\n      ref={containerRef}\n      id=\"content-frame\"\n      className=\"align-center relative h-[calc(100vh-320px)] w-full pt-[8rem] md:flex\"\n    >\n                <div className=\"absolute flex justify-center -top-5 w-full md:justify-end\" onMouseOver={toggleWiggle}>\n            <div className=\"relative flex flex-row items-center px-2\">\n            <motion.div\n                initial={{ opacity: 1 }}\n                animate={{\n                  opacity: !hasTotalBan ? 1 : 0.5,\n                }}\n                exit={{ opacity: 0.5 }}\n              >\n                <DateSlider\n                  value={dateRange}\n                  onValueChange={setDateRange}\n                  disable={activeStep !== finalStep}\n                />\n              </motion.div>\n              <StateSelect\n                value={state}\n                onValueChange={setState}\n                className=\"st-highlight-dropdown !w-[160px] text-l bg-new-highlighter !border-none !rounded-sm shadow-[0_8px_12px_-4px_rgba(0,0,0,0.03)]\"\n              />\n              {!isSmallScreen && ( \n                <InteractionBubble className=\"absolute -left-24 top-7 flex w-[120px]\">\n                  <div id=\"control-wiggle\" \n                    className={activeStep === finalStep ? \"flex animation-wiggle\" : \"flex\"}>\n                    <PointIcon className=\"size-8\" />\n                  </div>\n                  <div className=\"content-center text-new-navy\">\n                    <div className=\"st-directions-text text-[12px] font-semibold uppercase leading-3 w-[80px]\">\n                      Filter by state & time\n                    </div>\n                  </div>\n                </InteractionBubble>\n              )} \n            </div>\n          </div>\n      {!hasTotalBan && (\n        <MonthlyChart\n          state={state}\n          {...stepProps}\n          dateRange={[dates[dateRange[0]], dates[dateRange[1]]]}\n          setShowEventInteractionBubble={setShowEventInteractionBubble}\n        />\n      )}\n      {state == \"IN\" && (\n        <MonthlyChart\n          state={state}\n          {...stepProps}\n          dateRange={[dates[dateRange[0]], dates[dateRange[1]]]}\n          setShowEventInteractionBubble={setShowEventInteractionBubble}\n        />\n      )}\n      {!hasTotalBan && (\n        <>\n          <div className=\"absolute bottom-0 left-[50%] max-w-[800px] mx-auto w-full -translate-x-1/2 translate-y-full p-4 text-lg md:text-2xl\">\n            <StepperText\n              activeStep={activeStep}\n              state={state}\n              numSteps={numSteps}\n              showEventInteractionBubble={showEventInteractionBubble}\n            />\n          </div>\n        </>\n      )}\n      {state ==\"IN\" && (\n        <>\n          <div className=\"absolute bottom-0 left-[50%] max-w-[800px] mx-auto w-full -translate-x-1/2 translate-y-full p-4 text-lg md:text-2xl\">\n            <StepperText\n              activeStep={activeStep}\n              state={state}\n              numSteps={numSteps}\n              showEventInteractionBubble={showEventInteractionBubble}\n            />\n          </div>\n        </>\n      )}\n\n      {/* Opening title */}\n      <AnimatePresence>\n        {activeStep === 0 && (\n          <motion.div\n            className=\"absolute bottom-0 left-[50%] mx-auto w-full -translate-x-1/2 translate-y-full pt-4 px-4 text-lg md:text-2xl\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n          >\n            <OpeningText\n              refMap={refMap}\n              state={state}\n              setState={setState}\n              hasTotalBan={hasTotalBan}\n            />\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\nexport default OpenerDesktop;\n","import ClosingSection from \"@/components/ClosingSection\";\nimport InterstateTravelSection from \"@/components/InterstateTravelSection\";\nimport MetricsSection from \"@/components/MetricsSection\";\nimport MonthlyChartSection from \"@/components/MonthlyChartSection\";\nimport NavBar from \"@/components/NavBar\";\nimport PolicySection from \"@/components/PolicySection\";\nimport Stepper from \"@/components/Stepper\";\nimport WaveBackground from \"@/components/WaveBackground\";\nimport data, { dates } from \"@/data/data_bar\";\nimport steps from \"@/data/steps\";\nimport { ChevronsRightIcon } from \"lucide-react\";\nimport { createContext, useEffect, useMemo, useState, useRef } from \"react\";\nimport { mean, sum, range } from \"@visx/vendor/d3-array\";\nimport timeline from \"@/data/data_state_timeline.json\";\nimport { isSameMonth, isSameYear, parse } from \"date-fns\";\nimport { statesWithTotalBan, statesWithTotalBanIN, statesWithPolicyMoments } from \"@/data/states\";\nimport OpenerDesktop from \"@/components/OpenerDesktop\";\nimport OpenerMobile from \"@/components/OpenerMobile\";\nimport useMeasure from \"react-use-measure\";\n// import Footer from \"@/components/gutt/Footer\";\n// import Header from \"@/components/gutt/Header\";\n\nexport const PageContext = createContext({ activeSection: \"at-a-glance\" });\nexport const DataContext = createContext({});\n\nfunction App() {\n  const refMap = useRef(null);\n  const [containerRef, { width, height }] = useMeasure();\n  const [state, setState] = useState(\"US\");\n  const [dateRange, setDateRange] = useState([0, dates.length - 1]);\n  const [activeStep, setActiveStep] = useState(0);\n  const [activeSection, setActiveSection] = useState(\"at-a-glance\");\n  const [showEventInteractionBubble, setShowEventInteractionBubble] =\n    useState(true);\n\n  const numSteps = useMemo(() => {\n    const stateTimeline = timeline.find((d) => d.state === state);\n\n    // Policy steps\n    return stateTimeline.point3_date\n      ? 8\n      : stateTimeline.point2_date\n        ? 7\n        : stateTimeline.point1_date\n          ? 6\n          : 4;\n\n    // return 4;\n  }, [state]);\n\n  useEffect(() => {\n    setDateRange(steps[activeStep].dateRange);\n  }, [activeStep]);\n\n  const stepMap = useMemo(() => {\n    if (numSteps === 4) {\n      return [0, 1, 2, 7];\n    } else {\n      return [...range(numSteps - 1), 7];\n    }\n    // return [0, 1, 2, 7];\n  }, [numSteps]);\n\n  const events = useMemo(() => {\n    const stateTimeline = timeline.find((d) => d.state === state);\n    if (!stateTimeline) return [];\n\n    return range(1, 4)\n      .map((i) => {\n        const pointDate = stateTimeline[`point${i}_date`];\n        if (!pointDate) return null;\n\n        const yearPrefix = pointDate.slice(0, 2);\n        const year = `20${yearPrefix}`;\n\n        const dateStr = pointDate.slice(3);\n\n        const date = parse(\n          `${dateStr} ${year}`,\n          \"MMM yyyy\",\n          new Date(),\n        );\n\n        return {\n          date,\n          dateObject: dates.find(\n            (d) => isSameMonth(d, date) && isSameYear(d, date),\n          ),\n          text: stateTimeline[`point${i}_text`],\n        };\n      })\n      .filter(Boolean);\n  }, [state]);\n\n  useEffect(() => {\n    events.forEach((d, i) => {\n      steps[4 + i].highlightDates = [d.dateObject];\n    });\n  }, [events]);\n\n  const stepProps = steps[stepMap[activeStep]];\n\n  const last6MonthsAbortionsAvg = useMemo(() => {\n    const last6MonthsAbortions = data\n      .filter((d) => d.state === state)\n      .slice(-6);\n\n    return mean(last6MonthsAbortions, (d) => d.nat50);\n  }, [state]);\n\n  const totalAbortions2023 = useMemo(() => {\n    const year2023Abortions = data.filter(\n      (d) => d.state === state && d.date.getFullYear() === 2023,\n    );\n\n    return sum(year2023Abortions, (d) => d.nat50);\n  }, [state]);\n\n  // const numStatesTotalAbortionBan = useMemo(() => {\n  //   return timeline.filter((d) => d.hasTotalBan === \"Y\").length;\n  // }, []);\n  const numStatesTotalAbortionBan = 12;\n\n  const hasTotalBan = useMemo(() => {\n    const stateData = timeline.find((d) => d.state === state);\n    return stateData ? stateData.hasTotalBan === \"Y\" : false;\n  }, [state]);\n\n  const finalStep = numSteps - 1;\n\n  const [scrollPosition, setScrollPosition] = useState(0);\n\n\n  useEffect(() => {\n    const handleScroll = () => {\n      setScrollPosition(window.scrollY || window.pageYOffset);\n    };\n\n    window.addEventListener(\"scroll\", handleScroll);\n\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [setScrollPosition]);\n\n  useEffect(() => {\n    if (document.getElementById(\"bottom-half\").style.display !== \"hidden\") {\n      if (scrollPosition > 0) {\n        document.getElementById(\"bottom-half\").style.display = \"block\";\n      }\n\n      if (statesWithTotalBan.includes(state)) {\n        document.getElementById(\"bottom-half\").style.display = \"block\";\n      } else {\n        if (activeStep === finalStep) {\n          document.getElementById(\"bottom-half\").style.display = \"block\";\n        }\n      }\n    }\n  }, [activeStep, finalStep, state, scrollPosition]);\n\n  useEffect(() => {\n    if (statesWithTotalBanIN.includes(state)) {\n      setActiveStep(0);\n      return;\n    }\n    if (!statesWithPolicyMoments.includes(state) && activeStep > 2) {\n      setActiveStep(2);\n    }\n  }, [state]);\n\n  return (\n    <PageContext.Provider value={{ activeSection, setActiveSection }}>\n      <DataContext.Provider\n        value={{\n          last6MonthsAbortionsAvg,\n          totalAbortions2023,\n          numStatesTotalAbortionBan,\n          stepMap,\n          events,\n          setState,\n        }}\n      >\n        {/* <Header /> */}\n        <main ref={containerRef} className=\"relative gutt-provision-dashboard\">\n          {activeStep == 0 && (\n            <div className=\"absolute h-[100vh] w-full left-0\">\n                <div className=\"title z-10 absolute left-1/2 top-1/3 -translate-y-1/2 -translate-x-1/2 flex flex-col align-center items-center max-w-[500px]\">\n                  <h1 className=\"mb-4 text-4xl font-bold text-center font-headline text-new-navy md:text-7xl\">Monthly Abortion Provision Study</h1>\n                  <h2 className=\"text-center st-title-h2 text-l md:text-xl\">US Abortion Data Dashboard</h2>\n                  {activeStep == 0 && !hasTotalBan && (\n\n                      <button\n                        onClick={() => setActiveStep(finalStep)}\n                         className=\"mt-4 bg-white shadow-[0_8px_12px_-4px_rgba(0,0,0,0.05)] border border-solid border-input rounded-full py-2 px-4 flex align-center text-new-navy justify-content-center hover:bg-new-violet-blue hover:text-white hover:border-new-violet-blue group\"\n                      >\n                        <span className=\"flex align-center justify-content-center gap-0 text-[12px] font-semibold uppercase\">\n                          Skip to full data{\" \"}\n                          </span>\n                          <ChevronsRightIcon className=\"self-center size-4 group-hover:stroke-white\" />\n                      </button>\n\n                  )}\n                </div>\n            </div>\n          )}\n          <WaveBackground />\n\n          {/* Opener */}\n          <div className=\"relative flex w-full h-screen pt-8 mx-auto max-w-7xl\">\n            {activeStep !== finalStep && activeStep !== 0 && !hasTotalBan && (\n                <button\n                  onClick={() => setActiveStep(finalStep)}\n                  className=\"absolute bg-white shadow-[0_8px_12px_-4px_rgba(0,0,0,0.05)] right-2 border border-input rounded-full py-2 px-4 flex align-center text-new-navy justify-content-center hover:bg-new-violet-blue hover:text-white hover:border-new-violet-blue group z-10 bottom-16 border-solid\"\n                >\n                  <span className=\"flex align-center justify-content-center gap-0 text-[12px] font-semibold uppercase\">\n                    Skip to full data{\" \"}\n                  </span>\n                    <ChevronsRightIcon className=\"self-center size-4 group-hover:stroke-white\" />\n\n                </button>\n            )}\n            <OpenerDesktop\n              refMap={refMap}\n              hasTotalBan={hasTotalBan}\n              state={state}\n              setState={setState}\n              stepProps={stepProps}\n              dateRange={dateRange}\n              setDateRange={setDateRange}\n              showEventInteractionBubble={showEventInteractionBubble}\n              setShowEventInteractionBubble={setShowEventInteractionBubble}\n              activeStep={activeStep}\n              setActiveStep={setActiveStep}\n              finalStep={finalStep}\n              numSteps={numSteps}\n            />\n\n            {/* Stepper */}\n            {!hasTotalBan && (\n              <Stepper\n                numSteps={numSteps}\n                activeStep={activeStep}\n                onActiveStepChange={setActiveStep}\n              />\n            )}\n            {state == \"IN\" && (\n              <Stepper\n                numSteps={numSteps}\n                activeStep={activeStep}\n                onActiveStepChange={setActiveStep}\n              />\n            )}\n          </div>\n\n          {/* Content */}\n          <div\n            id=\"bottom-half\"\n            className=\"mt-12\"\n          >\n            {/* Sticky navbar */}\n            <NavBar state={state} setState={setState} />\n\n            <div>\n              {/* Inset sections */}\n              <div className=\"px-5 md:px-10\">\n                {/* Metric cards */}\n                <MetricsSection state={state} />\n\n                {/* Monthly chart section*/}\n                <MonthlyChartSection state={state} setState={setState} hasTotalBanMon={hasTotalBan}/>\n\n                {/* Interstate travel section*/}\n                <InterstateTravelSection state={state} setState={setState} refMap={refMap} hasTotalBan={hasTotalBan} />\n\n                {/* Policy */}\n                <PolicySection />\n              </div>\n\n              {/* Methodology */}\n              <ClosingSection state={state} />\n            </div>\n          </div>\n        </main>\n        {/* <Footer /> */}\n      </DataContext.Provider>\n    </PageContext.Provider>\n  );\n}\n\nexport default App;\n","export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n","export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from '@/src/App';\n\nimport(\"@/src/globals.css\");\n\nconst root = ReactDOM.createRoot(document.getElementById('gutt-provision-dashboard-app'));\nroot.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>\n);\n\n// Since we are scoping tailwind css to the app, we need to\n// add the scoping class to any radix poppers that get injected into\n// the body since they live outside the app.\nconst observer = new MutationObserver((mutationsList) => {\n  for (const mutation of mutationsList) {\n    if (mutation.type === 'childList') {\n      mutation.addedNodes.forEach((node) => {\n        if (node.nodeType === Node.ELEMENT_NODE && node.hasAttribute('data-radix-popper-content-wrapper')) {\n          node.classList.add('gutt-provision-dashboard')\n          node.style.zIndex = 1000\n        }\n      });\n    }\n  }\n})\nobserver.observe(document.body, { childList: true, subtree: true })"],"names":["exports","_ref","_ref$from","from","x","y","_ref$to","to","_ref$fill","fill","className","innerRef","restProps","source","excluded","key","i","target","sourceKeys","Object","keys","length","indexOf","_objectWithoutPropertiesLoose","_excluded","isRectilinear","_react","default","createElement","_extends","ref","_classnames","x1","y1","x2","y2","shapeRendering","_interopRequireDefault","require","obj","__esModule","assign","bind","arguments","prototype","hasOwnProperty","call","apply","this","balanced","a","b","str","RegExp","maybeMatch","r","range","start","end","pre","slice","body","post","reg","m","match","begs","beg","left","right","result","ai","bi","push","pop","module","mediaQuery","values","parseQuery","some","query","inverse","typeMatch","type","expressionsMatch","expressions","every","expression","feature","modifier","expValue","value","toLowerCase","toPx","toDpi","toDecimal","parseInt","RE_MEDIA_QUERY","RE_MQ_EXPRESSION","RE_MQ_FEATURE","RE_LENGTH_UNIT","RE_RESOLUTION_UNIT","split","map","captures","trim","parsed","ratio","numbers","decimal","Number","resolution","parseFloat","String","debounce","func","wait","immediate","timeout","args","context","timestamp","later","last","Date","now","setTimeout","debounced","callNow","clear","clearTimeout","flush","ElementType","defineProperty","Doctype","CDATA","Tag","Style","Script","Comment","Directive","Text","Root","isTag","elem","CASE_SENSITIVE_TAG_NAMES","reduce","accumulator","tagName","HTML","HEAD","BODY","FIRST_TAG_REGEX","HEAD_TAG_REGEX","BODY_TAG_REGEX","parseFromDocument","html","Error","parseFromString","DOMParser","window","domParser_1","concat","document","implementation","htmlDocument_1","createHTMLDocument","element","documentElement","querySelector","innerHTML","parseFromTemplate","template","content","childNodes","firstTagName","doc","test","_a","parentNode","removeChild","_b","querySelectorAll","elements","domparser_1","__importDefault","utilities_1","DIRECTIVE_REGEX","TypeError","directive","undefined","formatDOM","domhandler_1","constants_1","formatAttributes","attributes","index","attributesLength","attribute","name","formatTagName","caseSensitiveTagName","CASE_SENSITIVE_TAG_NAMES_MAP","getCaseSensitiveTagName","nodes","parent","current","domNodes","nodesLength","node","nodeType","nodeName","Element","children","nodeValue","prev","next","ProcessingInstruction","substring","unshift","__createBinding","create","o","k","k2","desc","getOwnPropertyDescriptor","writable","configurable","enumerable","get","__exportStar","p","DomHandler","domelementtype_1","node_js_1","defaultOpts","withStartIndices","withEndIndices","xmlMode","callback","options","elementCB","dom","root","Document","done","tagStack","lastNode","parser","onparserinit","onreset","onend","handleCallback","onerror","error","onclosetag","endIndex","onopentag","attribs","addNode","ontext","data","oncomment","oncommentend","oncdatastart","text","oncdataend","onprocessinginstruction","previousSibling","startIndex","__extends","extendStatics","d","setPrototypeOf","__proto__","Array","__","constructor","__assign","t","s","n","cloneNode","hasChildren","isDocument","isDirective","isComment","isText","isCDATA","NodeWithChildren","DataNode","Node","set","recursive","_super","_this","namespace","prefix","cloneChildren","clone_1","forEach","child","clone_2","clone_3","instruction","sourceCodeLocation","childs","react_property_1","UNCONTROLLED_COMPONENT_ATTRIBUTES","UNCONTROLLED_COMPONENT_NAMES","valueOnlyInputs","reset","submit","getPropName","attributeName","possibleStandardNames","props","isInputValueOnly","Boolean","attributeValue","isCustomAttribute","attributeNameLowerCased","propName","propertyInfo","getPropertyInfo","includes","BOOLEAN","OVERLOADED_BOOLEAN","PRESERVE_CUSTOM_ATTRIBUTES","setStyleProp","style","react_1","attributes_to_props_1","React","cloneElement","isValidElement","skipAttributesToProps","isCustomComponent","domToReact","reactElements","hasReplace","replace","transform","returnFirstArg","library","replaceElement","dangerouslySetInnerHTML","__html","defaultValue","isWhitespace","canTextBeChildOfNode","html_dom_parser_1","dom_to_react_1","domParserOptions","lowerCaseAttributeNames","htmlparser2","style_to_js_1","RESERVED_SVG_MATHML_ELEMENTS","Set","has","is","styleOptions","reactCompat","version","ELEMENTS_WITH_NO_TEXT_CHILDREN","arg","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","lineno","column","updatePosition","lines","lastIndexOf","position","line","Position","whitespace","errorsList","msg","err","reason","filename","silent","re","exec","comments","rules","c","comment","pos","charAt","declaration","prop","val","ret","property","decl","decls","declarations","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entries","entry","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","getNative","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Symbol","eq","array","getRawTag","objectToString","symToStringTag","toStringTag","isFunction","isMasked","isObject","toSource","reIsHostCtor","funcProto","Function","objectProto","funcToString","toString","reIsNative","coreJsData","freeGlobal","global","isKeyable","__data__","baseIsNative","getValue","object","nativeObjectToString","isOwn","tag","unmasked","e","nativeCreate","size","maskSrcKey","uid","IE_PROTO","assocIndexOf","splice","getMapData","freeSelf","self","other","baseGetTag","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","join","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","setter","iteratee","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","string","trimmedEndIndex","baseUnary","baseValues","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","_","runInContext","defaults","pick","Math","arrayProto","idCounter","objectCtorString","oldDash","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","iterator","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Promise","WeakMap","metaMap","realNames","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","SetCache","add","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othProps","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","comparer","sort","baseSortBy","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","resolve","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","isInvoking","leadingEdge","cancel","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escape","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","search","newEnd","unescape","uniqueId","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","define","staticMatch","dynamicMatch","matchMedia","Mql","forceStatic","mql","evt","media","addListener","listener","removeListener","dispose","Mexp","formulaEval","pop1","pop2","pop3","disp","arr","show","inc","tokens","token","math","sin","cos","tan","P","C","anchor","asin","acos","atan","cosh","acosh","log","pow","sqrt","div","fact","tanh","atanh","mod","mul","sinh","asinh","sub","sigma","Pi","numberOfArguments","and","preced","precedence","type0","type1","type1Asterick","empty","type3Asterick","type6","newAr","str1","str2","f","indexOfToken","tokenize","Exception","tokenTypes","FUNCTION_WITH_ONE_ARG","NUMBER","BINARY_OPERATOR_HIGH_PRECENDENCE","CONSTANT","OPENING_PARENTHESIS","CLOSING_PARENTHESIS","DECIMAL","POSTFIX_FUNCTION_WITH_ONE_ARG","FUNCTION_WITH_N_ARGS","BINARY_OPERATOR_LOW_PRECENDENCE","BINARY_OPERATOR_PERMUTATION","COMMA","EVALUATED_FUNCTION","EVALUATED_FUNCTION_PARAMETER","SPACE","addToken","newTokens","changeSignObj","changeSign","closingParObj","openingParObj","lex","inp","ptc","inpStr","allowed","bracToClose","asterick","prevKey","j","cToken","cType","cEv","cPre","cShow","hasDec","isDegree","PI","pro","choice","toRadian","E","ex","postfixEval","pow10x","sinha","cosha","toPostfix","popped","prep","ele","flag","UserDefined","bool","toFixed","eval","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","aa","ca","encodeURIComponent","da","ea","fa","ha","ia","ja","ka","la","ma","v","g","acceptsBooleans","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","z","ra","sa","ta","pa","qa","oa","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","A","Ma","Na","Oa","prepareStackTrace","Reflect","construct","l","h","displayName","Pa","render","Qa","$$typeof","_context","_payload","_init","Ra","Sa","Ta","Va","_valueTracker","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","ownerDocument","eb","fb","selected","defaultSelected","disabled","gb","hb","ib","jb","textContent","kb","lb","mb","nb","namespaceURI","firstChild","appendChild","MSApp","execUnsafeLocalFunction","ob","lastChild","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","setProperty","tb","menuitem","area","base","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","ub","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","addEventListener","removeEventListener","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","flags","Wb","memoizedState","dehydrated","Xb","Zb","sibling","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","B","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","delete","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","priority","isDehydrated","containerInfo","Xc","Yc","dispatchEvent","shift","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","fromCharCode","code","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","date","datetime","email","month","password","tel","url","week","me","ne","oe","event","listeners","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","contains","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","href","Ne","contentEditable","Oe","focusedElem","selectionRange","selectionStart","selectionEnd","defaultView","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","focus","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","animation","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","Ub","instance","D","of","pf","qf","rf","sf","capture","passive","J","u","w","F","tf","uf","parentWindow","vf","wf","na","xa","$a","ba","je","char","ke","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","queueMicrotask","then","catch","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","G","Vf","H","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","deletions","Cg","pendingProps","overflow","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","_owner","_stringRef","refs","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","q","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","_currentValue","bh","childLanes","ch","dependencies","firstContext","lanes","dh","eh","memoizedValue","fh","gh","hh","interleaved","ih","jh","kh","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","lh","mh","eventTime","lane","payload","nh","K","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","L","Ch","revealOrder","Dh","Eh","_workInProgressVersionPrimary","Fh","ReactCurrentDispatcher","Gh","Hh","M","N","O","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","baseQueue","queue","Uh","Vh","Wh","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","dispatch","Xh","Yh","Zh","$h","getSnapshot","ci","Q","di","lastEffect","stores","ei","fi","gi","hi","ii","destroy","deps","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","R","Bi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ci","defaultProps","Di","Ei","isMounted","_reactInternals","enqueueSetState","enqueueReplaceState","enqueueForceUpdate","Fi","shouldComponentUpdate","isPureReactComponent","Gi","contextType","state","Hi","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ii","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Ji","digest","Ki","Li","console","Mi","Ni","Oi","Qi","getDerivedStateFromError","componentDidCatch","Ri","componentStack","Si","pingCache","Ti","Ui","Vi","Wi","ReactCurrentOwner","Xi","Yi","Zi","$i","aj","compare","bj","cj","dj","baseLanes","cachePool","transitions","ej","fj","gj","hj","ij","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","jj","kj","pendingContext","lj","zj","Aj","Bj","Cj","mj","nj","oj","fallback","pj","qj","sj","dataset","dgst","tj","uj","_reactRetry","rj","subtreeFlags","vj","wj","isBackwards","rendering","renderingStartTime","tailMode","xj","Dj","S","Ej","Fj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","createElementNS","autoFocus","createTextNode","T","Gj","Hj","Ij","Jj","U","Kj","WeakSet","V","Lj","W","Mj","Nj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","insertBefore","_reactRootContainer","Wj","X","Xj","Yj","Zj","onCommitFiberUnmount","componentWillUnmount","ak","bk","ck","dk","ek","isHidden","fk","gk","display","hk","ik","jk","kk","__reactInternalSnapshotBeforeUpdate","src","Vk","lk","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","finishedWork","finishedLanes","Pk","timeoutHandle","Qk","Rk","Sk","Tk","Uk","mutableReadLanes","Bc","Oj","onCommitFiberRoot","mc","onRecoverableError","Wk","onPostCommitFiberRoot","Xk","Yk","$k","isReactComponent","pendingChildren","al","mutableSourceEagerHydrationData","bl","pendingSuspenseBoundaries","dl","el","fl","gl","hl","il","yj","Zk","kl","reportError","ll","_internalRoot","ml","nl","ol","pl","rl","ql","unmount","unstable_scheduleHydration","JSON","stringify","form","sl","usingClientEntryPoint","Events","tl","findFiberByHostInstance","bundleType","rendererPackageName","ul","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","vl","isDisabled","supportsFiber","inject","createPortal","cl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","PropertyInfoRecord","CAMELIZE","CAMELCASE","SAME","possibleStandardNamesOptimized","standardName","BOOLEANISH_STRING","NUMERIC","POSITIVE_NUMERIC","RESERVED","STRING","accept","acceptCharset","accessKey","allowFullScreen","alt","as","async","autoCapitalize","autoComplete","autoCorrect","autoPlay","autoSave","cellPadding","cellSpacing","challenge","charSet","cite","class","classID","cols","colSpan","contextMenu","controls","controlsList","coords","crossOrigin","dateTime","disablePictureInPicture","disableRemotePlayback","download","draggable","encType","enterKeyHint","formMethod","formAction","formEncType","formNoValidate","formTarget","frameBorder","headers","hidden","hrefLang","htmlFor","httpEquiv","icon","inputMode","integrity","itemID","itemProp","itemRef","itemScope","itemType","keyParams","keyType","kind","label","lang","list","loop","manifest","marginWidth","marginHeight","mediaGroup","minLength","muted","noModule","nonce","noValidate","open","optimum","playsInline","poster","preload","profile","radioGroup","readOnly","referrerPolicy","rel","required","reversed","role","rows","rowSpan","sandbox","scope","scoped","scrolling","seamless","sizes","span","spellCheck","srcDoc","srcLang","srcSet","summary","tabIndex","title","useMap","wmode","about","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","datatype","decelerate","descent","diffuseConstant","direction","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","exponent","externalResourcesRequired","fillRule","filterRes","filterUnits","floodColor","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","format","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","ideographic","imageRendering","in2","in","inlist","intercept","k1","k3","k4","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","numOctaves","orient","orientation","origin","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","resource","restart","results","rotate","rx","ry","scale","security","seed","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","strikethroughPosition","strikethroughThickness","stroke","strokeLinecap","strokeLinejoin","suppressContentEditableWarning","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","typeof","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","unselectable","vAlphabetic","vectorEffect","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewBox","viewTarget","visibility","vMathematical","vocab","widths","wordSpacing","writingMode","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","yChannelSelector","zoomAndPan","__self","__source","Fragment","jsx","jsxs","setState","forceUpdate","_status","_result","Children","only","Component","Profiler","PureComponent","StrictMode","Suspense","act","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","lazy","memo","startTransition","unstable_act","reduceFunctionCall","mexp","NESTED_CALC_RE","decimalPrecision","evaluateExpression","functionIdentifier","evaluatedPart","nonEvaluatedPart","balancedExpr","evaluated","evaluateNestedExpression","units","uniqueUnits","uniqueLowerCaseUnits","unitRegEx","getUnitsInExpression","unit","percent","toEvaluate","functionRE","fnRE","searchMatch","SyntaxError","getFunctionCalls","evalFunctionCall","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","navigator","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","style_to_object_1","StyleToJS","output","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","character","trimHyphen","skipCamelCase","inline_style_parser_1","styleObject","hasIterator","hasOwn","classNames","classes","appendClass","parseValue","newClass","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","leafPrototypes","getProto","ns","def","getOwnPropertyNames","definition","chunkId","all","promises","miniCssF","globalThis","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","onload","doneFns","nmd","loadStylesheet","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","request","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createScope","scopeContexts","defaultContext","contexts","rootComponentName","BaseContext","Context","consumerName","composeContextScopes","_len","scopes","_key","baseScope","scopeHooks","createScope2","useScope","overrideScopes","nextScopes","nextScopes2","composeRefs","setRef","useComposedRefs","_len2","_key2","Slot","forwardedRef","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","SlotClone","childrenRef","_Object$getOwnPropert","_Object$getOwnPropert2","mayWarn","isReactWarning","getElementRef","mergeProps","Slottable","childProps","slotPropValue","childPropValue","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","collectionRef","itemMap","CollectionProvider","COLLECTION_SLOT_NAME","CollectionSlot","composedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlot","itemData","ItemSlot","collectionNode","orderedNodes","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","useCallbackRef","callbackRef","_callbackRef$current","useControllableState","defaultProp","onChange","uncontrolledProp","setUncontrolledProp","_ref2","uncontrolledState","prevValueRef","handleChange","useUncontrolledState","isControlled","nextValue","value2","Primitive","primitive","asChild","primitiveProps","Comp","useLayoutEffect2","Presence","present","presence","setNode","React2","stylesRef","prevPresentRef","prevAnimationNameRef","initialState","send","machine","nextState","useStateMachine","mounted","UNMOUNT","ANIMATION_OUT","unmountSuspended","MOUNT","ANIMATION_END","unmounted","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","handleAnimationEnd","isCurrentAnimation","ReactDOM","handleAnimationStart","isPresent","node2","getComputedStyle","usePresence","useReactId","deterministicId","setId","reactId","COLLAPSIBLE_NAME","createCollapsibleContext","createCollapsibleScope","CollapsibleProvider","useCollapsibleContext","Collapsible","__scopeCollapsible","openProp","defaultOpen","onOpenChange","collapsibleProps","setOpen","contentId","onOpenToggle","prevOpen","getState","TRIGGER_NAME","CollapsibleTrigger","triggerProps","CONTENT_NAME","CollapsibleContent","forceMount","contentProps","CollapsibleContentImpl","setIsPresent","heightRef","widthRef","isOpen","isMountAnimationPreventedRef","originalStylesRef","rAF","requestAnimationFrame","cancelAnimationFrame","transitionDuration","rect","getBoundingClientRect","Trigger","Content","DirectionContext","useDirection","localDir","globalDir","ACCORDION_NAME","ACCORDION_KEYS","Collection","useCollection","createAccordionContext","createAccordionScope","useCollapsibleScope","Accordion","accordionProps","singleProps","multipleProps","__scopeAccordion","AccordionImplMultiple","AccordionImplSingle","AccordionValueProvider","useAccordionValueContext","AccordionCollapsibleProvider","useAccordionCollapsibleContext","collapsible","valueProp","onValueChange","accordionSingleProps","onItemOpen","onItemClose","AccordionImpl","accordionMultipleProps","handleItemOpen","itemValue","handleItemClose","AccordionImplProvider","useAccordionContext","getItems","isDirectionLTR","handleKeyDown","onKeyDown","_triggerCollection$cl","triggerCollection","item","_item$ref$current","triggerIndex","triggerCount","nextIndex","moveNext","movePrev","ITEM_NAME","AccordionItemProvider","useAccordionItemContext","AccordionItem","accordionItemProps","accordionContext","valueContext","collapsibleScope","triggerId","CollapsiblePrimitive","open2","HEADER_NAME","AccordionHeader","headerProps","itemContext","h3","AccordionTrigger","collapsibleContext","AccordionContent","Root2","Item","Header","Trigger2","Content2","toKebabCase","mergeClasses","defaultAttributes","Icon","absoluteStrokeWidth","iconNode","attrs","createLucideIcon","iconName","ChevronDown","clsx","CLASS_PART_SEPARATOR","createClassUtils","config","classMap","theme","nextPart","validators","prefixedClassGroupEntries","classGroupEntries","_ref4","classGroupId","classGroup","prefixedClassGroup","classDefinition","fromEntries","_ref5","getPrefixedClassGroupEntries","classGroups","processClassesRecursively","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","classParts","getGroupRecursive","arbitraryPropertyRegex","arbitraryPropertyClassName","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","hasPostfixModifier","conflicts","classPartObject","_classPartObject$vali","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","isThemeGetter","_ref3","getPart","currentClassPartObject","pathPart","createLruCache","maxCacheSize","cacheSize","previousCache","IMPORTANT_MODIFIER","createSplitModifiers","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","modifiers","postfixModifierPosition","bracketDepth","modifierStart","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","SPLIT_CLASSES_REGEX","twJoin","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","configUtils","cacheGet","cacheSet","functionToCall","classList","previousConfig","createConfigCurrent","splitModifiers","createConfigUtils","tailwindMerge","cachedResult","classGroupsInConflict","originalClassName","isTailwindClass","variantModifier","sortedModifiers","unsortedModifiers","sortModifiers","modifierId","classId","mergeClassList","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","testValue","getDefaultConfig","colors","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","gap","gradientColorStops","gradientColorStopPositions","inset","margin","padding","saturate","sepia","skew","space","translate","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getZeroAndEmpty","getNumber","getNumberAndArbitrary","aspect","container","box","float","isolation","overscroll","bottom","basis","grow","shrink","row","justify","items","px","py","ps","pt","pr","mx","my","ms","mt","mr","screen","font","tracking","decoration","indent","align","break","hyphens","via","rounded","border","outline","ring","shadow","table","caption","duration","ease","animate","accent","appearance","caret","resize","scroll","snap","touch","select","sr","twMerge","cn","inputs","AccordionPrimitive","_jsx","_jsxs","_assertThisInitialized","ReferenceError","_inheritsLoose","subClass","superClass","_suppressOverwrites","_reverting","_globalTimeline","_win","_coreInitted","_doc","_coreReady","_lastRenderedFrame","_quickTween","_tickerActive","_config","autoSleep","force3D","nullTargetWarn","_defaults","overwrite","_bigNum","_tinyNum","_2PI","_HALF_PI","_gsID","_sqrt","_cos","_sin","_isString","_isFunction","_isNumber","_isUndefined","_isObject","_isNotFalse","_windowExists","_isFuncOrString","_isTypedArray","isView","_isArray","_strictNumExp","_numExp","_numWithUnitExp","_complexStringNumExp","_relExp","_delimitedValueExp","_unitExp","_globals","_installScope","_install","_merge","gsap","_missingPlugin","warn","_warn","suppress","_addGlobal","_emptyFunc","_startAtRevertConfig","suppressEvents","isStart","kill","_revertConfigNoKill","_revertConfig","_reservedProps","_lazyTweens","_lazyLookup","_plugins","_effects","_nextGCFrame","_harnessPlugins","_callbackNames","_harness","targets","harnessPlugin","_gsap","harness","targetTest","GSCache","_getCache","_getProperty","_forEachName","names","_round","_roundPrecise","_parseRelative","substr","_arrayContainsAny","toSearch","toFind","_lazyRender","tween","_lazy","_lazySafeRender","force","_initted","_startAt","_numericIfPossible","_passThrough","_setDefaults","toMerge","_mergeDeep","_copyExcluding","excluding","_inheritDefaults","vars","excludeDuration","keyframes","inherit","_dp","_addLinkedListItem","firstProp","lastProp","_prev","_next","_removeLinkedListItem","_removeFromParent","onlyIfParentHasAutoRemove","autoRemoveChildren","_act","_uncache","_end","_dur","_start","_dirty","_rewindStartAt","totalTime","revert","immediateRender","autoRevert","_hasNoPausedAncestors","_ts","_elapsedCycleDuration","_repeat","_animationCycle","_tTime","_rDelay","tTime","cycleDuration","whole","_parentToChildTotalTime","parentTime","totalDuration","_tDur","_setEnd","abs","_rts","_alignPlayhead","smoothChildTiming","_time","_postAddChecks","timeline","rawTime","_clamp","_zTime","_addToTimeline","skipChecks","_parsePosition","_delay","timeScale","_sort","_isFromOrFromStart","_recent","_scrollTrigger","trigger","ScrollTrigger","_attemptInitTween","_initTween","_pt","_ticker","frame","_parentPlayheadIsBeforeStart","_lock","_setDuration","skipUncache","leavePlayhead","totalProgress","_onUpdateTotalDuration","Timeline","_zeroPosition","endTime","percentAnimation","labels","recent","clippedDuration","_createTweenType","params","irVars","isLegacy","varsIndex","runBackwards","startAt","Tween","_conditionalReturn","getUnit","_slice","_isArrayLike","nonEmpty","_flatten","ar","leaveStrings","_accumulator","selector","_wake","nativeElement","distribute","_parseEase","isDecimal","ratios","axis","ratioX","ratioY","center","edges","originX","originY","wrapAt","distances","grid","amount","_invertEase","_roundModifier","raw","snapTo","is2D","increment","closest","roundingIncrement","returnFunction","_wrapArray","_replaceRandom","nums","mapRange","inMin","inMax","outMin","outMax","outRange","_getLabelInDirection","fromTime","backward","distance","_callback","executeLazyFirst","prevContext","_ctx","callbackScope","_interrupt","scrollTrigger","progress","_registerPluginQueue","_createPlugin","headless","Plugin","init","_props","instanceDefaults","_renderPropTweens","_addPropTween","_killPropTweensOf","_addPluginModifier","rawVars","statics","getSetter","_getSetter","aliases","register","PropTween","_255","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","m1","m2","splitColor","toHSL","forceAlpha","wasHSL","_colorOrderData","_colorExp","_formatColors","orderMatchData","shell","_hslExp","_colorStringFilter","combined","_id","_req","_raf","_self","_delta","_i","_getTime","_lagThreshold","_adjustedLag","_startTime","_lastUpdate","_gap","_nextTime","_listeners","_tick","overlap","elapsed","manual","tick","deltaRatio","fps","wake","gsapVersions","GreenSockGlobals","sleep","lagSmoothing","threshold","adjustedLag","_fps","prioritize","_easeMap","_customEaseExp","_quotesExp","_parseObjectInString","parsedVal","_propagateYoyoEase","isYoyo","_first","yoyoEase","_yoyo","_ease","_yEase","defaultEase","close","_valueInParentheses","_CE","_configEaseFromString","_insertEase","easeIn","easeOut","easeInOut","lowercaseName","_easeInOutFromOut","_configElastic","period","p1","p2","p3","_configBack","overshoot","power","Linear","easeNone","none","n1","n2","n3","SteppedEase","steps","immediateStart","Animation","repeatDelay","yoyo","_proto","_totalTime","_ptLookup","_pTime","iteration","_ps","_recacheAncestors","paused","includeRepeats","wrapRepeats","prevIsReverting","globalTime","_sat","seek","includeDelay","play","pause","atTime","resume","invalidate","isActive","eventCallback","_onUpdate","onFulfilled","_resolve","_then","_prom","_Animation","sortChildren","_proto2","fromTo","fromVars","toVars","delayedCall","staggerTo","stagger","onCompleteAll","onCompleteAllParams","onComplete","onCompleteParams","staggerFrom","staggerFromTo","prevPaused","pauseTween","prevStart","prevIteration","prevTime","tDur","crossingStart","rewinding","doesWrap","repeatRefresh","onRepeat","_hasPause","_forcing","_last","_findNextPauseTween","onUpdate","adjustedTime","_this2","addLabel","getChildren","tweens","timelines","ignoreBeforeTime","getById","animations","removeLabel","killTweensOf","_totalTime2","addPause","removePause","onlyActive","getTweensOf","_overwritingTween","parsedTargets","isGlobalTime","_targets","tweenTo","initted","_vars","_onStart","onStart","onStartParams","tweenFromTo","fromPosition","toPosition","nextLabel","afterTime","previousLabel","beforeTime","currentLabel","shiftChildren","adjustLabels","soft","includeLabels","updateRoot","_forceAllPropTweens","_addComplexStringPropTween","stringFilter","funcParam","startNums","endNum","startNum","hasRandom","_renderComplexString","matchIndex","fp","optional","currentValue","parsedStart","_setterFuncWithParam","_setterFunc","_setterPlain","_renderBoolean","_renderPlain","_checkPlugin","plugin","ptLookup","_parseFuncOrString","_processVars","cleanVars","hasPriority","gsData","harnessVars","overwritten","prevStartAt","fullTargets","autoOverwrite","_overwrite","_from","_ptCache","_op","_sortPropTweensByPriority","_onInit","_parseKeyframe","allProps","easeEach","_staggerTweenProps","_staggerPropsToSkip","_Animation2","skipInherit","_this3","curTarget","staggerFunc","staggerVarsToMerge","_this3$vars","kf","_proto3","isNegative","prevRatio","_renderZeroDurationTween","resetTo","startIsRelative","skipRecursion","rootPT","lookup","ptCache","_updatePropTweens","overwrittenProps","curLookup","curOverwriteProps","killingTargets","propTweenLookup","firstPT","a1","a2","_arraysMatch","propertyAliases","_addAliasesToVars","onReverseComplete","onReverseCompleteParams","_setterAttribute","hasNonDependentRemaining","op","dep","_setterWithModifier","mSet","pt2","change","renderer","TweenMax","TweenLite","TimelineLite","TimelineMax","_media","_emptyArray","_lastMediaTime","_contextID","_dispatch","_onMediaChange","anyMatch","toggled","queries","conditions","onMatch","_r","isReverted","_proto5","prevSelector","ignore","getTweens","_this4","MatchMedia","_proto6","mq","active","registerPlugin","getProperty","uncache","quickSetter","setters","quickTo","_merge2","isTweening","registerEffect","effect","plugins","extendTimeline","pluginName","registerEase","parseEase","exportRoot","includeDelayedCalls","matchMediaRefresh","found","utils","wrapYoyo","total","normalize","pipe","unitize","mutate","interpolators","master","install","ticker","globalTimeline","core","globals","getCache","reverting","toAdd","suppressOverwrites","_getPluginPropTween","_buildModifierPlugin","_addModifiers","Power0","Power1","Power2","Power3","Power4","Quad","Cubic","Quart","Quint","Strong","Elastic","Back","Bounce","Sine","Expo","Circ","_docElement","_pluginInitted","_tempDiv","_recentSetterPlugin","_supports3D","_transformProps","_RAD2DEG","_DEG2RAD","_atan2","atan2","_capsExp","_horizontalExp","_complexExp","_propertyAliases","autoAlpha","alpha","_renderCSSProp","_renderPropWithEnd","_renderCSSPropWithBeginning","_renderRoundedCSSProp","_renderNonTweeningValue","_renderNonTweeningValueOnlyAtEnd","_setterCSSStyle","_setterCSSProp","_setterTransform","_setterScale","scaleX","scaleY","_setterScaleWithRender","renderTransform","_setterTransformWithRender","_transformProp","_transformOriginProp","_saveStyle","isNotCSS","tfm","_get","zOrigin","svg","svgo","_removeIndependentTransforms","removeProperty","_revertStyle","_getStyleSaver","saver","save","_createElement","_getComputedProperty","skipPrefixFallback","cs","getPropertyValue","_checkPropPrefix","_prefixes","preferPrefix","_initCore","cssText","_getBBoxHack","swapIfPossible","ownerSVGElement","oldParent","oldSibling","oldCSS","getBBox","_gsapBBox","_getAttributeFallbacks","attributesArray","hasAttribute","_getBBox","bounds","_isSVG","getCTM","_removeProperty","first2Chars","_addNonTweeningPT","beginning","onlySetAtEnd","_nonConvertibleUnits","deg","rad","turn","_nonStandardLayouts","_convertToUnit","isSVG","curValue","curUnit","horizontal","isRootSVG","measureProperty","toPixels","toPercent","_parseTransform","_firstTwoOnly","_specialProps","_tweenComplexCSSString","startValues","startValue","endValue","endUnit","startUnit","_keywordToPercent","_convertKeywordsToPercentages","_renderClearProps","clearTransforms","clearProps","_identity2DMatrix","_rotationalProperties","_isNullTransform","_getComputedTransformMatrixAsArray","matrixString","_getMatrix","force2D","addedToDOM","matrix","baseVal","consolidate","offsetParent","nextElementSibling","_applySVGOrigin","originIsAbsolute","smooth","matrixArray","pluginToAddPropTweensTo","determinant","xOriginOld","xOrigin","yOriginOld","yOrigin","xOffsetOld","xOffset","yOffsetOld","yOffset","tx","ty","originSplit","rotation","rotationX","rotationY","skewX","skewY","perspective","angle","a12","a22","t1","t2","t3","a13","a23","a33","a42","a43","a32","invertedScaleX","forceCSS","xPercent","offsetWidth","yPercent","offsetHeight","transformPerspective","_renderSVGTransforms","_renderCSSTransforms","_renderNon3DTransforms","_addPxTranslate","_zeroDeg","_zeroPx","_endParenthesis","use3D","a11","a21","_addRotationalPropTween","cap","finalValue","_assign","_addRawTransformPTs","endCache","startCache","side","CSSPlugin","specialProp","relative","isTransformRelated","transformPropTween","inlineProps","parseTransform","smoothOrigin","autoRound","checkPrefix","getStyleSaver","positionAndScale","others","gsapWithCSS","useIsomorphicLayoutEffect","isConfig","emptyArray","defaultConfig","useGSAP","revertOnUpdate","contextSafe","deferCleanup","_defineProperties","descriptor","_docEl","_body","_isTouch","_pointerType","_root","_normalizer","_eventTypes","_getGSAP","_startup","_observers","_scrollers","_proxies","_bridge","_getProxyProp","_isViewport","_addListener","_removeListener","_scrollLeft","_scrollTop","_onScroll","isPressed","_scrollCacheFunc","doNotCache","cachingFunc","history","scrollRestoration","isNormalizing","iOS","cacheID","_horizontal","os","os2","d2","scrollTo","_vertical","pageXOffset","pageYOffset","_getTarget","_getScrollFunc","scrollingElement","_getVelocityProp","minTimeRefresh","useDelta","v1","v2","dropToZeroTime","getVelocity","latestValue","tOld","vOld","_getEvent","_gsapAllow","_getAbsoluteMax","_setScrollTrigger","bridge","scrollers","proxies","_integrate","Observer","isTouch","maxTouchPoints","msMaxTouchPoints","eventTypes","Constructor","protoProps","staticProps","tolerance","dragMinimum","onStop","onStopDelay","wheelSpeed","onDragStart","onDragEnd","onDrag","onPress","onRelease","onRight","onLeft","onUp","onDown","onChangeX","onChangeY","onToggleX","onToggleY","onHover","onHoverEnd","onMove","ignoreCheck","isNormalizer","onGestureStart","onGestureEnd","onWheel","onEnable","onDisable","scrollSpeed","allowClicks","lockAxis","onLockAxis","onStopDelayedCall","dragged","moved","wheeled","locked","prevDeltaX","prevDeltaY","scrollFuncX","scrollFuncY","scrollX","scrollY","limitToTouch","isViewport","ownerDoc","onClickTime","clickCapture","_ignoreCheck","isPointerOrTouch","changedX","changedY","onDelta","_vx","_vy","onTouchOrPointerDelta","_onDrag","isDragging","startX","startY","_onPress","_onRelease","isTrackingDrag","wasDragging","isDragNotClick","eventData","click","createEvent","syntheticEvent","initMouseEvent","isGesturing","_onGestureStart","_onGestureEnd","onScroll","_onWheel","innerHeight","_onMove","_onHover","_onHoverEnd","_onClick","_dc","enable","isEnabled","disable","getAll","_resizeDelay","_toArray","_time2","_syncInterval","_refreshing","_pointerIsDown","_prevWidth","_prevHeight","_autoRefresh","_ignoreResize","_ignoreMobileResize","_baseScreenHeight","_baseScreenWidth","_fixIOSBug","_scrollRestoration","_div100vh","_100vh","_isReverted","_clampingMax","_limitCallbacks","_rafID","_refreshingAll","_queueRefreshID","_primary","_time1","_lastScrollTime","_enabled","_parseClamp","_keepClamp","_rafBugFix","_pointerDownHandler","_pointerUpHandler","_getViewportDimension","dimensionProperty","_getBoundsFunc","_winOffsets","innerWidth","_getBounds","_maxScroll","_iterateAutoRefresh","events","_endAnimation","enabled","callbackAnimation","_abs","_left","_right","_bottom","_width","_height","_Right","_Left","_Top","_Bottom","_padding","_margin","_Width","_Height","_px","_getComputedStyle","withoutTransforms","_getSize","_getLabelRatioArray","_snapDirectional","snapIncrementOrArray","snapped","_multiListener","nonPassive","_wheelListener","scrollFunc","wheelHandler","_markerDefaults","startColor","endColor","toggleActions","anticipatePin","_keywords","_offsetToPx","eqIndex","_createMarker","matchWidthEl","containerAnimation","useFixedPosition","isScroller","css","_isStart","innerText","_offset","_positionMarker","marker","flipped","oppositeSide","_isFlipped","_triggers","_ids","_sync","_updateAll","clientWidth","_setBaseDimensions","_onResize","fullscreenElement","webkitFullscreenElement","_softRefresh","_refreshAll","_savedStyles","_revertRecorded","_revertAll","_clearScrollMemory","rec","_refreshID","_refresh100vh","_hideAllMarkers","hide","skipRevert","isRefreshing","refreshInits","scrollBehavior","refresh","_subPinOffset","pin","original","adjustPinSpacing","scroller","_dir","endClamp","_endClamp","startClamp","_startClamp","setPositions","onRefresh","_lastScroll","_direction","isUpdating","recordVelocity","_propNamesToCopy","_stateProps","_swapPinIn","spacer","spacerState","swappedIn","spacerStyle","pinStyle","flexBasis","boxSizing","_setState","_getState","scrollerSize","markerScroller","scrollerBounds","scrollerMax","clampZeroProp","localOffset","globalOffset","offsets","_caScrollDist","_prefixExp","_reparent","_stOrig","_interruptionTracker","getValueFunc","onInterrupt","last1","last2","_shiftMarker","_getTweenCreator","getScroll","getTween","change1","change2","checkForInterruption","pinCache","snapFunc","scroll1","scroll2","markerStartTrigger","markerEndTrigger","markerVars","executingOnRefresh","pinOriginalState","pinActiveState","pinState","pinGetter","pinSetter","pinStart","pinChange","spacingStart","markerStartSetter","pinMoves","markerEndSetter","snap1","snap2","scrubTween","scrubSmooth","snapDurClamp","snapDelayedCall","prevScroll","prevAnimProgress","caMarkerSetter","customRevertReturn","toggleClass","onToggle","scrub","pinSpacing","invalidateOnRefresh","onScrubComplete","onSnapComplete","pinReparent","pinSpacer","fastScrollEnd","preventOverlaps","isToggle","scrollerCache","pinType","callbacks","onEnter","onLeave","onEnterBack","onLeaveBack","markers","onRefreshInit","getScrollerSize","_getSizeFunc","getScrollerOffsets","_getOffsetsFunc","lastSnap","lastRefresh","prevProgress","refreshPriority","tweenScroll","scrubDuration","_getClosestLabel","st","directional","refreshedRecently","endScroll","velocity","naturalEnd","inertia","_snap","_onInterrupt","_onComplete","stRevert","spacerIsNative","_makePositionable","oldOnUpdate","oldParams","onUpdateParams","prevRefreshing","_swapPinOut","pinOffset","isVertical","override","curTrigger","curPin","oppositeScroll","revertedPins","forcedOverflow","markerStartOffset","markerEndOffset","isFirstRefresh","otherPinOffset","parsedEnd","parsedEndTrigger","endTrigger","pinnedContainer","_pinPush","_pinOffset","omitOffsets","_copyState","endAnimation","labelToScroll","getTrailing","forceFake","toggleState","stateChanged","isAtMax","isTakingAction","clipped","newStart","keepClamp","_change","allowAnimation","onKill","updateFunc","_queueRefreshAll","clearInterval","userAgent","mm","bodyStyle","borderTopStyle","AnimationProto","setInterval","limitCallbacks","syncInterval","ignoreMobileResize","autoRefreshEvents","scrollerProxy","clearMatchMedia","isInViewport","positionInViewport","referencePoint","killAll","allowListeners","saveStyles","safe","clearScrollMemory","maxScroll","getScrollFunc","isScrolling","snapDirectional","batch","varsCopy","interval","batchMax","proxyCallback","triggers","_inputIsFocused","_clampScrollAndGetDurationMultiplier","_allowNativePanning","touchAction","_overflow","auto","_nestedScroll","_isScrollT","scrollHeight","clientHeight","scrollWidth","overflowY","overflowX","_isScroll","_inputObserver","_captureInputs","_inputExp","isInput","_getScrollNormalizer","maxY","lastRefreshID","skipTouchMove","startScrollX","startScrollY","_vars2","normalizeScrollX","momentum","allowNestedScroll","smoother","ScrollSmoother","smootherInstance","initialScale","visualViewport","outerWidth","wheelRefresh","resolveMomentumDuration","inputObserver","resumeTouchMove","scrollClampX","scrollClampY","updateClamps","removeContentOffset","onResize","ignoreDrag","prevScale","currentScroll","velocityX","velocityY","xArray","yArray","yClamped","observe","normalizeScroll","normalizer","ss","baseClass","HTMLReactParser","setActiveSection","PageContext","SectionTitle","parse","sumtext","_ref6","_ref7","_ref8","_ref9","_ref10","staffURL","imageURL","staff","constructFrom","defaultOptions","getDefaultOptions","getInternalDefaultOptions","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formats","formatLong","full","long","medium","short","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","localize","ordinalNumber","dirtyNumber","_options","rem100","era","narrow","abbreviated","wide","quarter","day","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","valueCallback","parsePattern","parseResult","enUS","formatDistance","tokenValue","addSuffix","comparison","formatRelative","_date","_baseDate","weekStartsOn","firstWeekContainsDate","toDate","argStr","NaN","dateLongFormatter","timeLongFormatter","longFormatters","dateTimeLongFormatter","datePattern","timePattern","dateTimeFormat","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","_message","subject","RangeError","_typeof","toPropertyKey","toPrimitive","_defineProperty","transpose","fromDate","setFullYear","getFullYear","getMonth","getDate","setHours","getHours","getMinutes","getSeconds","getMilliseconds","Setter","validate","_utcDate","ValueSetter","validateValue","subPriority","super","DateToSystemTimezoneSetter","timestampIsSet","Parser","run","dateString","_value","millisecondsInWeek","millisecondsInDay","numericPatterns","timezonePatterns","mapValue","parseFnResult","mapFn","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","trunc","isLeapYearIndex","year","startOfWeek","_options$weekStartsOn","_options$locale","_defaultOptions$local","getDay","diff","setDate","getWeekYear","_options$firstWeekCon","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","getTime","startOfISOWeek","startOfWeekYear","firstWeek","getWeek","setWeek","getISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","startOfISOWeekYear","fourthOfJanuary","getISOWeek","setISOWeek","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","addDays","setDay","currentDay","delta","getISODay","setISODay","getTimezoneOffsetInMilliseconds","utcDate","UTC","setUTCFullYear","parsers","isTwoDigitYear","normalizedTwoDigitYear","_flags","firstWeekOfYear","setMonth","isLeapYear","wholeWeekDays","isPM","hours","setMinutes","setSeconds","setMilliseconds","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dateStr","formatStr","referenceDate","_options$locale2","_options$locale3","_defaultOptions$local2","defaultLocale","subFnOptions","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleTokens","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setterArray","abToStateUnfiltered","Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","DC","Florida","Georgia","Guam","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","Ohio","Oklahoma","Oregon","Palau","Pennsylvania","Tennessee","Texas","Utah","Vermont","Virginia","Washington","Wisconsin","Wyoming","stateAbs","abToState","stateToAb","stateToId","idToState","statesWithTotalBan","hasTotalBan","statesWithTotalBanIN","statesWithPolicyMoments","point1_text","processedData","metrics","states","dates","metric","placement","PointIcon","proportion","proportionBorder","Group","_ref$top","_ref$left","stop","initRange","domain","propTypes","InternMap","keyof","defineProperties","_intern","intern_get","intern_set","intern_delete","implicit","ordinal","unknown","band","bandwidth","ordinalRange","r0","r1","paddingInner","paddingOuter","rescale","sequence","rangeRound","pointish","point","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","hsl","clamph","clampt","hsl2rgb","channels","displayable","formatHex8","formatHsl","radians","degrees","Xn","Yn","Zn","t0","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","hcl","linear","hue","gamma","nogamma","exponential","colorHcl","hclLong","colorHsl","hslLong","ED","EB","BC_DA","cubehelix","Cubehelix","cubehelixConvert","cubehelixGamma","colorCubehelix","cubehelixLong","v0","v3","rgbGamma","colorRgb","rgbSpline","spline","interpolatorMap","colorLab","interpolateHcl","interpolateHclLong","interpolateHsl","interpolateHslLong","interpolateCubehelix","interpolateCubehelixLong","interpolateRgb","timeInterval","floori","offseti","field","d0","d1","setTime","durationSecond","durationMinute","durationHour","durationDay","durationWeek","timeDay","getTimezoneOffset","utcDay","setUTCHours","setUTCDate","getUTCDate","unixDay","timeHour","utcHour","setUTCMinutes","getUTCHours","timeMinute","utcMinute","setUTCSeconds","getUTCMinutes","timeMonth","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","second","getUTCSeconds","timeWeekday","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeYear","utcYear","TEST_TIME","TEST_FORMAT","localTimeIntervals","hour","minute","timeSecond","timeWeek","utcIntervals","utcSecond","utcWeek","ALL_OPERATORS","operators","nice","isUtc","tickFormat","isUtcScale","parsedInterval","zero","isDescending","domainWithZero","interpolator","createColorInterpolator","interpolateRound","reversedRange","scaleOperator","ops","selection","selectedOps","updatePointScale","e10","e5","e2","tickIncrement","LN10","ascending","descending","bisector","compare1","compare2","lo","ascendingBisect","bisectRight","genericArray","reA","reB","bm","bs","numberArray","bimap","polymap","bisect","transformer","untransform","piecewise","clamper","interpolateNumber","prefixExponent","formatSpecifier","specifier","FormatSpecifier","sign","comma","formatDecimalParts","toExponential","coefficient","%","toLocaleString","toPrecision","formatRounded","formatPrefix","prefixes","grouping","thousands","currencyPrefix","currency","currencySuffix","numerals","formatNumerals","minus","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","i1","i0","formatTrim","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","prestep","maxIter","formatLocale","updateLinearScale","createLinearScale","scaleLinear","useMeasure","_temp","polyfill","offsetSize","ResizeObserver","scrollContainers","resizeObserver","lastBounds","scrollDebounce","resizeDebounce","forceRefresh","resizeChange","scrollChange","HTMLElement","freeze","areBoundsEqual","createDebounce","removeListeners","disconnect","addListeners","scrollContainer","onWindowResize","findScrollContainers","parentElement","nest","regroup","groups","getTicks","numTicks","coerceNumber","num","Line","MEASUREMENT_ELEMENT_ID","textEl","getElementById","getComputedTextLength","isXOrYInValid","xOrY","useText","_props$verticalAnchor","verticalAnchor","_props$scaleToFit","scaleToFit","_props$lineHeight","_props$capHeight","textProps","_textProps$x","_textProps$y","isXOrYNotValid","_useMemo","wordsWithWidth","wordWidth","getStringWidth","spaceWidth","wordsByLines","currentLine","newLine","startDy","reduceCSSCalc","lineWidth","sx","sy","SVG_STYLE","_props$dx","_props$dy","_props$textAnchor","innerTextRef","_useText","Ticks","hideTicks","tickClassName","tickComponent","allTickLabelProps","tickLabelProps","_ref$tickStroke","tickStroke","tickTransform","tickLineProps","_allTickLabelProps$in","formattedValue","tickLabelFontSize","tickYCoord","Orientation","defaultTextProps","AxisRenderer","axisFromPoint","axisLineClassName","axisToPoint","hideAxisLine","_ref$label","labelClassName","_ref$labelOffset","labelOffset","labelProps","_ref$orientation","_ref$stroke","_ref$strokeWidth","_ref$tickLength","tickLength","_ref$ticksComponent","ticksComponent","combinedLabelProps","tickLabelPropsDefault","maxTickLabelFontSize","yBottomOffset","getLabelTransform","Point","_ref$x","_ref$y","createPoint","defaultAxisRangePadding","Axis","originalRangePadding","_ref$children","axisClassName","_ref$hideAxisLine","_ref$hideTicks","_ref$hideZero","hideZero","_ref$numTicks","_ref$rangePadding","rangePadding","tickValues","getTickFormatter","isLeft","isTop","tickPosition","scaledValue","getTickPosition","tickSign","rangePaddingConfig","filteredTickValues","bottomTickLabelProps","AxisBottom","tickLabelPropsFinal","leftTickLabelProps","AxisLeft","getScaleBandwidth","GridColumns","lineStyle","scaleOffset","tickLines","_coerceNumber","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","arc","a0","ccw","cw","setNumberOrNumberAccessor","_temp3","defined","curve","pointX","pointY","curveLinear","defined0","lineStart","lineEnd","d3Line","areaStart","_line","areaEnd","_point","LinePath","_ref$data","_ref$defined","isBrowser","useIsMounted","MotionGlobalConfig","Queue","scheduled","stepsOrder","createRenderBatcher","scheduleNextBatch","allowKeepAlive","runNextFrame","useDefaultElapsed","isProcessing","acc","thisFrame","nextFrame","numToRun","flushNextFrame","toKeepAlive","schedule","addToCurrentFrame","frameData","createRenderStep","processStep","stepId","processBatch","keepAlive","cancelFrame","PresenceContext","useConstant","MotionConfigContext","transformPagePoint","isStatic","reducedMotion","PopChildMeasure","prevProps","childRef","sizeRef","offsetTop","offsetLeft","PopChild","motionPopId","sheet","insertRule","PresenceChild","onExitComplete","custom","presenceAffectsLayout","presenceChildren","newChildrenMap","childId","isComplete","LayoutGroupContext","warning","invariant","getChildKey","AnimatePresence","exitBeforeEnter","forceRender","forcedRenderCount","setForcedRenderCount","postRender","useForceUpdate","filteredChildren","filtered","onlyElements","childrenToRender","exitingChildren","presentChildren","allChildren","isInitialRender","updateChildLookup","presentKeys","targetKeys","numPresent","component","insertionIndex","exitingComponent","onExit","leftOverKeys","childKey","leftOverKey","presentChild","presentChildKey","MotionContext","LazyContext","strict","camelToDash","optimizedAppearDataAttribute","microtask","cancelMicrotask","isRefObject","SwitchLayoutGroupContext","scheduleHandoffComplete","useVisualElement","visualState","createVisualElement","ProjectionNodeConstructor","visualElement","lazyContext","presenceContext","reducedMotionConfig","visualElementRef","blockInitialAnimation","initialLayoutGroupConfig","projection","initialPromotionConfig","layoutId","layout","drag","dragConstraints","layoutScroll","layoutRoot","latestValues","getClosestProjectingNode","setOptions","alwaysMeasureLayout","scheduleRender","animationType","createProjectionNode","wantsHandoff","HandoffComplete","updateFeatures","animationState","animateChanges","completeHandoff","allowProjection","useMotionRef","externalRef","mount","isVariantLabel","isAnimationControls","variantPriorityOrder","variantProps","isControllingVariants","isVariantNode","variants","useCreateMotionContext","getCurrentTreeVariants","variantLabelsAsDependency","featureProps","exit","hover","pan","inView","featureDefinitions","motionComponentSymbol","createMotionComponent","preloadedFeatures","useRender","useVisualState","features","loadFeatures","ForwardRefComponent","MeasureLayout","configAndProps","useLayoutId","useStrictMode","layoutProjection","ProjectionNode","getProjectionFunctionality","layoutGroupId","createMotionProxy","createConfig","Proxy","componentCache","_target","lowercaseSVGElements","isSVGComponent","scaleCorrectors","transformPropOrder","transformProps","isForcedMotionValue","isMotionValue","translateAlias","numTransforms","checkStringStartsWith","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","getValueAsType","sanitize","floatRegex","colorRegex","singleColorRegex","createUnitType","vw","progressPercentage","int","numberValueTypes","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","maxWidth","maxHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","marginTop","marginRight","marginBottom","marginLeft","rotateX","rotateY","rotateZ","scaleZ","translateX","translateY","translateZ","originZ","backgroundPositionX","backgroundPositionY","buildHTMLStyles","transformTemplate","transformOrigin","hasTransform","hasTransformOrigin","transformIsNone","valueType","valueAsType","transformIsDefault","enableHardwareAcceleration","allowTransformNone","transformString","transformName","buildTransform","createHtmlRenderState","copyRawValuesOnly","useStyle","useInitialMotionValues","useHTMLProps","htmlProps","dragListener","userSelect","WebkitUserSelect","WebkitTouchCallout","onTap","onTapStart","whileTap","validMotionProps","isValidMotionProp","shouldForward","loadExternalIsValidProp","isValidProp","calcOrigin","dashKeys","camelKeys","buildSVGAttrs","isSVGTag","attrX","attrY","attrScale","pathSpacing","pathOffset","latest","dimensions","pxOriginX","pxOriginY","calcSVGTransformOrigin","useDashCase","buildSVGPath","createSvgRenderState","useSVGProps","_isStatic","visualProps","rawStyles","createUseRender","forwardMotionProps","filteredProps","isDom","filterProps","elementProps","renderedChildren","renderHTML","styleProp","getProjectionStyles","camelCaseAttributes","renderSVG","renderState","_styleProp","scrapeMotionValuesFromProps","newValues","liveStyle","scrapeMotionValuesFromProps$1","getValueState","resolveVariantFromProps","isKeyframesTarget","isCustomValue","resolveFinalValueInKeyframes","resolveMotionValue","unwrappedValue","makeUseVisualState","make","createRenderState","onMount","makeLatestValues","makeState","scrapeMotionValues","motionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","resolved","transitionEnd","valueTarget","svgMotionConfig","read","htmlMotionConfig","addDomEvent","eventName","handler","isPrimaryPointer","extractEventInfo","pointType","addPointerInfo","addPointerEvent","combineFunctions","transformers","createLock","lock","openLock","globalHorizontalLock","globalVerticalLock","getGlobalLock","openHorizontal","openVertical","isDragActive","openGestureLock","Feature","addHoverEvent","callbackName","handleEvent","info","getProps","whileHover","setActive","isNodeOrChild","fireSyntheticPointerEvent","syntheticPointerEvent","PointerEvent","observerCallbacks","observers","fireObserverCallback","fireAllObserverCallbacks","observeIntersection","rootInteresectionObserver","lookupRoot","rootObservers","IntersectionObserver","initIntersectionObserver","unobserve","thresholdNames","gestureAnimations","hasEnteredView","isInView","startObserver","viewport","rootMargin","isIntersecting","onViewportEnter","onViewportLeave","hasOptionsChanged","prevViewport","hasViewportOptionChanged","removeStartListeners","removeEndListeners","removeAccessibleListeners","startPointerPress","startEvent","startInfo","isPressing","removePointerUpListener","endPointerPress","endEvent","endInfo","checkPressEnd","onTapCancel","globalTapTarget","removePointerCancelListener","cancelEvent","cancelInfo","cancelPress","startPress","startAccessiblePress","removeKeydownListener","keydownEvent","keyupEvent","removeBlurListener","handleBlur","removePointerListener","removeFocusListener","onFocus","isFocusVisible","onBlur","shallowCompare","prevLength","resolveVariant","secondsToMilliseconds","seconds","millisecondsToSeconds","milliseconds","underDampedSpring","stiffness","damping","restSpeed","keyframesTransition","getDefaultTransition","valueKey","getValueTransition","instantAnimationState","isNotNull","getFinalKeyframe","finalKeyframe","repeatType","resolvedKeyframes","clearTime","newTime","isZeroValueString","isNone","isNumericalString","splitCSSVariableRegex","getVariableValue","token1","token2","parseCSSVariable","trimmed","positionalKeys","isNumOrPxType","getPosFromMatrix","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","transformKeys","nonTranslationalTransformKeys","positionalValues","_ref11","testValueType","dimensionValueTypes","findDimensionValueType","toResolve","isScheduled","anyNeedsMeasurement","measureAllKeyframes","resolversToMeasure","needsMeasurement","elementsToMeasure","transformsToRestore","removedTransforms","removeNonTranslationalTransform","measureInitialState","restore","measureEndState","suspendedScrollY","complete","readAllKeyframes","readKeyframes","KeyframeResolver","unresolvedKeyframes","motionValue","isAsync","scheduleResolve","resolveKeyframes","valueAsRead","readValue","setFinalKeyframe","renderEndStyles","isColorString","testProp","aName","bName","cName","rgbUnit","clampRgbUnit","alpha$1","saturation","lightness","NUMBER_TOKEN","COLOR_TOKEN","VAR_TOKEN","VAR_FUNCTION_TOKEN","SPLIT_TOKEN","complexRegex","analyseComplexValue","originalValue","var","parsedValue","parseComplexValue","createTransformer","numSections","convertNumbersToZero","complex","getAnimatableNone","maxDefaults","applyDefaultFilter","functionRegex","defaultValueTypes","backgroundColor","outlineColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","WebkitFilter","getDefaultValueType","defaultValueType","invalidTemplates","DOMKeyframesResolver","owner","keyframe","resolveNoneKeyframes","originType","targetType","noneKeyframeIndexes","animatableTemplate","noneIndex","makeNoneKeyframesAnimatable","measuredOrigin","measureViewportBox","measureKeyframe","jump","finalKeyframeIndex","unsetTransformName","unsetTransformValue","isAnimatable","BaseAnimation","autoplay","isStopped","hasAttemptedResolve","updateFinishedPromise","_resolved","onKeyframesResolved","isGenerator","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","hasKeyframesChanged","canAnimate","resolveFinishedPromise","resolvedAnimation","initPlayback","onPostResolved","currentFinishedPromise","velocityPerSecond","frameDuration","velocitySampleDuration","calcGeneratorVelocity","resolveValue","prevT","safeMin","minDuration","maxDuration","minDamping","maxDamping","findSpring","envelope","derivative","bounce","mass","dampingRatio","undampedFreq","exponentialDecay","calcAngularFreq","exp","initialGuess","rootIterations","approximateRoot","durationKeys","physicsKeys","isSpringType","spring","restDelta","isResolvedFromDuration","springOptions","derived","getSpringOptions","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","resolveSpring","angularFreq","dampedAngularFreq","freqForT","calculatedDuration","currentVelocity","isBelowVelocityThreshold","isBelowDisplacementThreshold","timeConstant","bounceDamping","bounceStiffness","modifyTarget","nearestBoundary","ideal","calcDelta","calcLatest","applyFriction","timeReachedBoundary","spring$1","checkCatchBoundary","isOutOfBounds","hasUpdatedFrame","calcBezier","subdivisionPrecision","subdivisionMaxIterations","cubicBezier","mX1","mY1","mX2","mY2","getTForX","aX","lowerBound","upperBound","currentX","currentT","binarySubdivide","mirrorEasing","easing","reverseEasing","circIn","circOut","circInOut","backOut","backIn","backInOut","easingLookup","anticipate","easingDefinitionToFunction","toFromDifference","mixNumber","hueToRgb","mixImmediate","mixLinearColor","fromExpo","expo","colorTypes","asRGBA","getColorType","model","hslaToRgba","mixColor","fromRGBA","toRGBA","blended","invisibleValues","mixNumber$1","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","originStats","targetStats","mixVisibility","orderedOrigin","pointers","originIndex","originValue","matchOrder","mixer","isClamp","inputLength","mixers","customMixer","mixerFactory","numMixers","easingFunction","createMixers","progressInRange","defaultOffset","offsetProgress","fillOffset","keyframeValues","easingFunctions","isEasingArray","absoluteTimes","convertOffsetToTimes","mapTimeToKeyframe","frameloopDriver","passTimestamp","generators","decay","percentToProgress","MainThreadAnimation","KeyframeResolver$1","holdTime","cancelTime","currentTime","playbackSpeed","pendingPlayState","teardown","onResolved","keyframes$1","generatorFactory","mapPercentToKeyframes","mirroredGenerator","generator","calcGeneratorDuration","resolvedDuration","timeWithoutDelay","isInDelayPhase","frameGenerator","currentIteration","iterationProgress","isAnimationFinished","finish","driver","newSpeed","hasChanged","onPlay","stopDriver","isBezierDefinition","isWaapiSupportedEasing","supportedWaapiEasing","cubicBezierAsString","mapEasingToNativeEasingWithDefault","mapEasingToNativeEasing","supportsWaapi","acceleratedValues","AcceleratedAnimation","requiresPregeneratedKeyframes","pregeneratedAnimation","sampleAnimation","pregeneratedKeyframes","pregenerateKeyframes","valueName","keyframeOptions","iterations","animateStyle","pendingTimeline","onfinish","playbackRate","playState","attachTimeline","sampleTime","setWithVelocity","supports","supportsScrollTimeline","ScrollTimeline","GroupPlaybackControls","runAll","onResolve","onReject","setAll","cancelAll","onFrame","observeTimeline","cancelTimeline","animateMotionValue","isHandoff","valueTransition","when","delayChildren","staggerChildren","staggerDirection","isTransitionDefined","shouldSkip","isWillChangeMotionValue","addUniqueItem","removeItem","SubscriptionManager","subscriptions","notify","numSubscriptions","getSize","collectMotionValues","MotionValue","canTrackVelocity","updateAndNotify","updatedAt","setPrevFrameValue","setCurrent","renderRequest","hasAnimated","isFloat","prevFrameValue","prevUpdatedAt","subscription","on","unsubscribe","clearListeners","eventManagers","attach","passiveEffect","stopPassiveEffect","getPrevious","startAnimation","animationStart","animationComplete","clearAnimation","animationCancel","isAnimating","setMotionValue","hasValue","addValue","getOptimisedAppearId","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","animateTarget","targetAndTransition","transitionOverride","willChange","animationTypeState","HandoffAppearAnimations","appearId","shouldReduceMotion","setTarget","animateVariant","variant","getAnimation","getChildAnimations","variantChildren","forwardDelay","maxStaggerDuration","generateStaggerDuration","sortByTreeOrder","animateChildren","sortNodePosition","reversePriorityOrder","numAnimationTypes","animateList","resolvedDefinition","animateVisualElement","checkVariantsDidChange","createTypeState","prevResolvedValues","createState","whileInView","whileDrag","whileFocus","buildResolvedTypeValues","changedActiveType","getVariantContext","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","manuallyAnimateOnMount","prevProp","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","allKeys","markToAnimate","valueHasChanged","fallbackAnimation","fallbackTarget","getBaseTarget","shouldAnimate","setAnimateFunction","makeAnimator","createAnimationState","updateAnimationControlsSubscription","unmountControls","subscribe","prevAnimate","prevIsPresent","prevPresenceContext","exitAnimation","PanSession","handlers","contextWindow","dragSnapToOrigin","lastMoveEvent","lastMoveEventInfo","updatePoint","getPanInfo","isPanStarted","isDistancePastThreshold","xDelta","yDelta","distance2D","handlePointerMove","transformPoint","handlePointerUp","onEnd","onSessionEnd","resumeAnimation","panInfo","initialInfo","onSessionStart","updateHandlers","subtractPoint","lastDevicePoint","startDevicePoint","timeDelta","timestampedPoint","lastPoint","calcLength","isNear","maxDistance","calcAxisDelta","originPoint","calcBoxDelta","calcRelativeAxis","calcRelativeAxisPosition","calcRelativePosition","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","defaultElastic","resolveAxisElastic","dragElastic","minLabel","maxLabel","resolvePointElastic","createDelta","createBox","eachAxis","convertBoundingBoxToBox","isIdentityScale","hasScale","has2DTranslate","is2DTranslate","scalePoint","applyPointDelta","boxScale","applyAxisDelta","applyBoxDelta","snapToDefault","translateAxis","transformAxis","scaleKey","originKey","axisOrigin","xKeys","yKeys","transformBox","topLeft","bottomRight","transformBoxPoints","getContextWindow","elementDragControls","VisualElementDragControls","openGlobalLock","currentDirection","constraints","hasMutatedConstraints","elastic","originEvent","snapToCursor","panSession","pauseAnimation","stopAnimation","dragPropagation","resolveConstraints","isAnimationBlocked","getAxisMotionValue","measuredAxis","layoutBox","dragDirectionLock","onDirectionLock","lockThreshold","getCurrentDirection","updateAxis","getAnimationState","getTransformPagePoint","shouldDrag","axisValue","applyConstraints","measure","prevConstraints","resolveRefConstraints","calcRelativeConstraints","resolveDragElastic","relativeConstraints","rebaseAxisConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","rootProjectionNode","viewportBox","measurePageBox","measuredConstraints","calcViewportConstraints","userConstraints","convertBoxToBoundingBox","dragMomentum","dragTransition","onDragTransitionEnd","momentumAnimations","startAxisValueAnimation","dragKey","externalMotionValue","scalePositionWithinConstraints","boxProgress","sourceLength","targetLength","updateScroll","updateLayout","stopPointerListener","measureDragConstraints","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","hasLayoutChanged","asyncHandler","globalProjectionState","hasAnimatedSinceResize","hasEverUpdated","pixelsToPercent","pixels","correctBorderRadius","correct","correctBoxShadow","treeScale","projectionDelta","xScale","yScale","averageScale","MeasureLayoutWithContext","layoutGroup","switchLayoutGroup","correctors","defaultScaleCorrectors","didUpdate","safeToRemove","layoutDependency","willUpdate","promote","relegate","getStack","members","currentAnimation","isLead","promoteContext","scheduleCheckAfterUnmount","deregister","applyTo","boxShadow","borders","numBorders","asNumber","isPx","getRadius","radiusName","easeCrossfadeIn","compress","easeCrossfadeOut","copyAxisInto","originAxis","copyBoxInto","originBox","removePointDelta","removeAxisTransforms","sourceAxis","removeAxisDelta","removeBoxTransforms","sourceBox","isAxisDeltaZero","isDeltaZero","boxEqualsRounded","NodeStack","prevLead","lead","indexOfNode","member","preserveFollowOpacity","resumeFrom","preserveOpacity","snapshot","animationValues","isLayoutDirty","crossfade","exitAnimationComplete","resumingFrom","removeLeadSnapshot","buildProjectionTransform","latestTransform","xTranslate","yTranslate","zTranslate","elementScaleX","elementScaleY","compareByDepth","FlatTree","isDirty","transformAxes","hiddenVisibility","projectionFrameData","totalNodes","resolvedTargetDeltas","recalculatedProjection","resetDistortingTransform","sharedAnimationValues","setStaticValue","isOptimisedAppearTree","projectionNode","hasCheckedOptimisedAppear","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","animationId","isTreeAnimating","isProjectionDirty","isSharedProjectionDirty","isTransformDirty","updateManuallyBlocked","updateBlockedByResize","needsReset","shouldResetTransform","eventHandlers","hasTreeAnimated","updateScheduled","projectionUpdateScheduled","checkUpdateFailed","clearAllSnapshots","updateProjection","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","MotionDebug","record","hasProjected","isVisible","animationProgress","sharedNodes","notifyListeners","subscriptionManager","hasListeners","SVGElement","cancelDelay","resizeUnblockUpdate","checkElapsed","finishAnimation","registerSharedNode","hasRelativeTargetChanged","newLayout","isTreeAnimationBlocked","relativeTarget","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","targetChanged","targetLayout","hasOnlyRelativeTargetChanged","setAnimationOrigin","animationOptions","blockUpdate","unblockUpdate","isUpdateBlocked","startUpdate","resetSkewAndRotation","getTransformTemplate","shouldNotifyListeners","HandoffCancelAllAnimations","prevTransformTemplateValue","updateSnapshot","clearMeasurements","clearIsLayoutDirty","resetTransformStyle","notifyLayoutUpdate","preRender","clearSnapshot","removeLeadSnapshots","scheduleUpdateProjection","prevLayout","layoutCorrected","phase","isRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","removeElementScroll","roundAxis","measuredBox","boxWithoutScroll","rootScroll","applyTransform","transformOnly","withTransforms","boxWithoutTransform","setTargetDelta","targetDelta","forceRelativeParentToResolveTarget","relativeParent","resolvedRelativeTargetAt","forceRecalculation","getLead","isShared","attemptToResolveRelativeTarget","getClosestProjectingParent","relativeTargetOrigin","targetWithTransforms","isProjecting","canSkip","pendingAnimation","prevTreeScaleX","prevTreeScaleY","treePath","isSharedTransition","treeLength","applyTreeDeltas","projectionTransform","projectionDeltaWithTransform","prevProjectionTransform","notifyAll","snapshotLatestValues","mixedValues","relativeLayout","isSharedLayoutAnimation","isOnlyMember","shouldCrossfadeOpacity","hasOpacityCrossfade","prevRelativeTarget","mixTargetDelta","mixAxisDelta","mixAxis","follow","opacityExit","borderLabel","followRadius","leadRadius","mixValues","motionValue$1","animateSingleValue","completeAnimation","applyTransformsToTarget","shouldAnimatePositionOnly","xLength","yLength","shouldPreserveFollowOpacity","getPrevLead","hasDistortingTransform","resetValues","emptyStyles","valuesToRender","corrected","resetTree","measuredLayout","axisSnapshot","layoutDelta","visualDelta","parentSnapshot","parentLayout","relativeSnapshot","onBeforeLayoutMeasure","userAgentContains","roundPoint","DocumentProjectionNode","HTMLProjectionNode","documentNode","removePointerDownListener","onPointerDown","pointerDownEvent","session","createPanHandlers","onPanSessionStart","onPanStart","onPan","onPanEnd","removeGroupControls","dragControls","prefersReducedMotion","hasReducedMotionListener","visualElementStore","valueTypes","propEventHandlers","numVariantProps","VisualElement","_prevProps","_visualElement","valueSubscriptions","prevMotionValues","propEventSubscriptions","notifyUpdate","triggerBuild","renderInstance","baseTarget","initialValues","initialMotionValues","removeFromVariantTree","addVariantChild","bindToMotionValue","motionMediaQuery","setReducedMotionPreferences","initPrefersReducedMotion","valueIsTransform","removeOnChange","removeOnRenderRequest","sortInstanceNodePosition","featureDefinition","FeatureConstructor","build","measureInstanceViewportBox","getStaticValue","prevValue","existingValue","removeValue","updateMotionValuesFromProps","handleChildMotionValue","getVariant","getClosestVariantNode","closestVariantNode","removeValueFromRenderState","getBaseTargetFromProps","readValueFromInstance","findValueType","setBaseTarget","valueFromInitial","DOMVisualElement","HTMLVisualElement","defaultType","computedStyle","childSubscription","SVGVisualElement","createDomVisualElement","motion","createDomMotionConfig","DEFAULT_POINT","localPoint","isTouchEvent","isMouseEvent","boundingClientRect","getXAndYFromEvent","screenCTM","isSVGGraphicsElement","getScreenCTM","isSVGSVGElement","createSVGPoint","matrixTransform","clientLeft","clientTop","nodeOrEvent","maybeEvent","localPointGeneric","Event","isEvent","splitter","resulterrbound","elen","flen","Qnew","bvirt","enow","fnow","eindex","findex","hindex","vec","Float64Array","ccwerrboundB","ccwerrboundC","C1","C2","orient2d","ax","ay","bx","detleft","detright","det","detsum","acxtail","acytail","bcxtail","bcytail","ahi","alo","bhi","blo","_j","_0","s1","s0","u3","acx","bcx","acy","bcy","estimate","errbound","C1len","C2len","Dlen","orient2dadapt","EPSILON","EDGE_STACK","Uint32Array","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_dists","hullPrev","hullNext","hullTri","hullHash","minX","minY","maxX","i2","minDist","dist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","subarray","triangles","halfedges","ey","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","xp","yp","_legalize","pseudoAngle","b0","p0","inCircle","hbl","_link","bp","cp","ids","dists","tempDist","swap","tmp","Polygon","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","circumcenters","x3","y3","inedges","_renderSegment","h0","h1","_project","renderBounds","renderCell","_clip","cellPolygons","cell","cellPolygon","polygon","c0","_regioncode","c1","_clipSegment","_step","neighbors","_cell","e0","_clipInfinite","_clipFinite","e1","sx0","sy0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","vx","vy","jitter","Delaunay","that","flatArray","flatIterable","_delaunator","_hullIndex","collinear","hypot","hullIndex","voronoi","dt","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygons","trianglePolygon","xAccessor","yAccessor","groupedData","textOutlineStyles","yFormat","tickYFormat","includeStates","avg","containerRef","hoveredData","setHoveredData","xMax","yMax","avgData","filteredData","voronoiDiagram","_ref$width","_ref$height","selectedData","dodgedLabelPositions","positions","dodgedPositions","separation","maxiter","maxerror","iter","dodge","onMouseMove","closestState","onMouseLeave","_dodgedLabelPositions","labelY","_Fragment","_dodgedLabelPositions2","epsilon2","halfPi","quarterPi","rejoin","Intersection","segments","compareIntersection","startInside","stream","segment","pointEqual","isSubject","Adder","_partials","_n","spherical","cartesian","lambda","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","longitude","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","polygonStart","pointRing","ringStart","ringEnd","polygonEnd","sinPhi","normal","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","phiArc","polygonContains","clipRejoin","sphere","pointLine","clean","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","circleStream","cosRadius","sinRadius","circleRadius","clipMax","clipMin","clipRectangle","visible","corner","comparePoint","x__","y__","v__","x_","y_","v_","activeStream","bufferStream","clipStream","linePoint","b1","polygonInside","cleanInside","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","methods","TransformStream","streamGeometry","geometry","streamGeometryType","streamObjectType","FeatureCollection","Sphere","coordinates","MultiPoint","LineString","streamLine","MultiLineString","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","boundsStream","fit","fitBounds","clipExtent","geoStream","fitExtent","extent","fitSize","fitWidth","fitHeight","maxDepth","cosMinDistance","project","delta2","resampleLineTo","phi2","lambda2","dx2","dy2","dz","lambda00","x00","y00","a00","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","theta","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","cr","smallRadius","notHemisphere","intersect","two","n2n2","n1n2","c2","n1xn2","uu","polar","q1","v00","point2","clipCircle","reflectX","reflectY","orthographicRaw","conicEqualAreaRaw","forward","cylindricalEqualAreaRaw","r0y","parallels","conicProjection","conicEqualArea","mercatorRaw","reclip","mercatorProjection","naturalEarth1Raw","phi4","A1","A2","A3","A4","equalEarthRaw","l2","l6","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","_taggedTemplateLiteral","cacheDigits","cacheAppend","cacheRadius","cacheCircle","PathString","digits","_append","append","strings","appendRound","_templateObject","_templateObject2","_templateObject3","_templateObject4","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","graticuleX","graticuleY","graticule","DX","DY","extentMajor","extentMinor","stepMajor","stepMinor","Graticule","currGraticule","geoGraticule","W0","W1","phi00","z0","projectionMapping","orthographic","albers","geoAlbers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","streams","multiplex","geoAlbersUsa","mercator","geoMercator","naturalEarth","equalEarth","Projection","_ref$projection","projectionFunc","graticuleLines","graticuleOutline","currProjection","geoPath","foreground","AlbersUsa","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","topology","objects","kx","ky","arcs","valueof","_arrayLikeToArray","len","arr2","_createForOfIteratorHelper","allowArrayLike","it","minLen","_unsupportedIterableToArray","normalCompletion","didErr","main","circles","background","complement","$","attr","_arr","heavier","lighter","thinner","thicker","_iterator","arrayAll","childMatcher","childFirst","firstElementChild","EnterNode","datum","_parent","bindIndex","enter","groupLength","dataLength","keyValue","nodeByKeyValue","keyValues","arraylike","xhtml","xlink","xml","namespaces","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","creatorInherit","uri","creatorFixed","constantNull","selection_cloneShallow","selection_cloneDeep","onRemove","typename","__on","onAdd","contextListener","CustomEvent","initEvent","dispatchConstant","dispatchFunction","Selection","parents","_groups","_parents","subgroups","subnode","subgroup","selectAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","matcher","enterGroup","updateGroup","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","styleValue","classed","creator","insert","deep","typenames","parseTypenames","Marker","_ref$markerWidth","_ref$markerHeight","_ref$markerUnits","MarkerArrow","_ref$size","midX","midY","useTooltip","initialTooltipState","_useState","tooltipOpen","tooltipState","setTooltipState","showTooltip","showArgs","tooltipLeft","tooltipTop","tooltipData","hideTooltip","updateTooltip","_setPrototypeOf","emptyRect","defaultStyles","Tooltip","_ref$offsetLeft","_ref$offsetTop","_ref$style","_ref$unstyled","unstyled","_ref$applyPositionSty","applyPositionStyle","TooltipPositionContext","isFlippedVertically","isFlippedHorizontally","TooltipPositionProvider","TooltipWithBounds","getRects","initialLeft","parentBounds","parentRect","ownBounds","initialTop","nodeRef","otherProps","placeTooltipLeft","placeTooltipUp","rightPlacementClippedPx","leftPlacementClippedPx","_rightPlacementClippedPx","_leftPlacementClippedPx","bottomPlacementClippedPx","topPlacementClippedPx","BaseComponent","_class","_React$PureComponent","WrappedComponent","_this$nodeRef","ArrowRight","unitedStates","topojson","idToFeature","graph","links","stateFrom","stateTo","state_occurrence","opacityScale","formatValue","Intl","NumberFormat","showOutflow","svgRef","widthScale","setHideTooltip","showInteractionBubble","setShowEventInteractionBubble","hoveredFeature","setHoveredFeature","DataContext","centerX","centerY","texture","highlightedTexture","textures","handleTooltip","MissingData","InteractionBubble","geoCentroid","nodesMap","filteredLinks","highlightStates","selectedFeature","highlight","isBanned","onMouseEnter","fromState","toState","_classCallCheck","TOKEN_PLACEHOLDER","TOKEN_OPEN_TAG","TOKEN_CLOSE_TAG","TOKEN_SELF_TAG","TOKEN_TEXT","NODE_FRAGMENT","NODE_TAG_ELEMENT","NODE_VOID_ELEMENT","NODE_PLACEHOLDER","NODE_TEXT","fields","_objectWithoutProperties","_createClass","createTagNode","createFragmentNode","createVoidNode","createPlaceholderNode","SYNTAX_BUILT_IN","regex","_e","_e2","syntax","res","rule","textTokens","lexer","SYNTAX_ERROR","tags","tree","predict","elementOrData","tagToken","openTag","endTag","pushTag","lookahead","mapping","keyPrefix","_val","_val2","Interpolate","_ref$mapping","_ref$graceful","graceful","showNotification","setShowNotification","clipboard","writeText","ShareIcon","Download","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","decorative","orientationProp","domProps","isValidOrientation","semanticProps","SeparatorPrimitive","usePrevious","useSize","setSize","borderSizeEntry","borderSize","SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProvider","useSwitchContext","Switch","__scopeSwitch","checkedProp","onCheckedChange","switchProps","setButton","hasConsumerStoppedPropagationRef","isFormControl","setChecked","prevChecked","BubbleInput","control","THUMB_NAME","SwitchThumb","thumbProps","inputProps","controlSize","inputProto","HTMLInputElement","Thumb","SwitchPrimitives","setShowOutflow","setToggleClass","originalBodyPointerEvents","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","DismissableLayerContext","layers","layersWithOutsidePointerEventsDisabled","branches","DismissableLayer","_node$ownerDocument","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","discrete","originalEvent","onPointerDownCapture","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","onFocusCapture","onBlurCapture","useFocusOutside","onEscapeKeyDownProp","useEscapeKeydown","dispatchUpdate","handleUpdate","DismissableLayerBranch","dispatchDiscreteCustomEvent","useFocusGuards","_edgeGuards$","_edgeGuards$2","edgeGuards","insertAdjacentElement","createFocusGuard","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FocusScope","trapped","onMountAutoFocus","onMountAutoFocusProp","onUnmountAutoFocus","onUnmountAutoFocusProp","scopeProps","setContainer","lastFocusedElementRef","focusScope","handleFocusIn2","handleFocusOut2","handleMutations2","mutations","mutation","removedNodes","mutationObserver","MutationObserver","childList","subtree","focusScopesStack","previouslyFocusedElement","mountEvent","candidates","candidate","focusFirst","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","findVisible","getTabbableEdges","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","isHiddenInput","FILTER_SKIP","FILTER_ACCEPT","nextNode","currentNode","upTo","preventScroll","isSelectableInput","activeFocusScope","arrayRemove","_stack$","createFocusScopesStack","updatedArray","sides","createCoords","oppositeSideMap","oppositeAlignmentMap","getSide","getAlignment","getOppositeAxis","getAxisLength","getSideAxis","getAlignmentAxis","getOppositeAlignmentPlacement","alignment","getOppositePlacement","getPaddingObject","expandPaddingObject","rectToClientRect","computeCoordsFromPlacement","rtl","sideAxis","alignmentAxis","alignLength","commonX","commonY","commonAlign","detectOverflow","_await$platform$isEle","platform","rects","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","contextElement","getDocumentElement","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","getSideOffsets","isAnySideFullyClipped","getNodeName","isNode","getWindow","isHTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","isTableElement","isContainingBlock","webkit","isWebKit","containerType","backdropFilter","contain","CSS","isLastTraversableNode","getNodeScroll","getParentNode","assignedSlot","host","getNearestOverflowAncestor","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getCssDimensions","hasOffset","shouldFallback","unwrapElement","domElement","noOffsets","getVisualOffsets","includeScale","isFixedStrategy","clientRect","visualOffsets","isFixed","floatingOffsetParent","shouldAddVisualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","topLayerSelectors","isTopLayer","getWindowScrollBarX","getClientRectFromClippingAncestor","clippingAncestor","visualViewportBased","getViewportRect","getDocumentRect","getInnerBoundingClientRect","hasFixedPositionAncestor","stopNode","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsetRect","isStaticPositioned","getTrueOffsetParent","svgOffsetParent","getContainingBlock","topLayer","elementClippingAncestors","currentContainingBlockComputedStyle","elementIsFixed","currentNodeIsContaining","ancestor","getClippingElementAncestors","_c","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","getClientRects","isRTL","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","timeoutId","io","cleanup","_io","isFirstUpdate","handleObserve","intersectionRatio","observeMove","frameId","reobserveFrame","firstEntry","_resizeObserver","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","_middlewareData$offse","_middlewareData$arrow","middlewareData","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","convertValueToCoords","arrow","alignmentOffset","checkMainAxis","checkCrossAxis","limiter","detectOverflowOptions","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","_middlewareData$flip","initialPlacement","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","isBasePlacement","oppositePlacement","getExpandedPlacements","lr","bt","getSideList","getOppositeAxisPlacements","placements","overflows","overflowsData","mainAlignmentSide","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextPlacement","resetPlacement","_overflowsData$map$so","isYAxis","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","yMin","nextDimensions","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","arrowDimensions","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","shouldAddOffset","centerOffset","limitShift","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse2","isOriginSide","computePosition","mergedOptions","platformWithCache","middleware","validMiddleware","statefulPlacement","resetCount","nextX","nextY","computePosition$1","deepEqual","getDPR","devicePixelRatio","roundByDPR","dpr","useLatestRef","arrow$1","isRef","arrow$2","offset$1","shift$1","limitShift$1","flip$1","size$1","hide$1","Arrow","arrowProps","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","setAnchor","onAnchorChange","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","PopperContentProvider","useContentContext","PopperContent","_arrowSize$width","_arrowSize$height","_middlewareData$arrow2","_middlewareData$arrow3","_middlewareData$trans","_middlewareData$trans2","_middlewareData$hide","sideOffset","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","hasExplicitBoundaries","floatingStyles","isPositioned","externalReference","externalFloating","whileElementsMounted","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","fullData","isMountedRef","initialStyles","useFloating","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","minWidth","onArrowChange","shouldHideArrow","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive","_middlewareData$arrow4","_middlewareData$arrow5","_middlewareData$arrow6","_middlewareData$arrow7","_middlewareData$arrow8","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Anchor","Portal","_globalThis$document","containerProp","portalProps","setMounted","VisuallyHidden","whiteSpace","wordWrap","getDefaultParent","originalTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","applyAttributeToOthers","markerName","controlAttribute","correctedTarget","correctTargets","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","__rest","__spreadArray","pack","SuppressedError","zeroRightClassName","fullWidthClassName","assignRef","currentValues","useMergeRefs","facade","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","assigned","useMedium","assignSyncMedium","cbs","assignMedium","pendingQueue","executeQueue","cycle","effectCar","ssr","createSidecarMedium","nothing","RemoveScroll","parentRef","onScrollCapture","onWheelCapture","onTouchMoveCapture","setCallbacks","forwardProps","removeScrollBar","shards","sideCar","noIsolation","inert","allowPinchZoom","Container","gapMode","SideCar","containerProps","lockRef","fullWidth","zeroRight","currentNonce","Target","isSideCarExport","makeStyleTag","__webpack_nonce__","stylesheetSingleton","counter","stylesheet","styleSheet","insertStyleTag","styleSingleton","isDynamic","styleHookSingleton","dynamic","zeroGap","getGapWidth","getOffset","documentWidth","windowWidth","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","RemoveScrollBar","noRelative","noImportant","newCounter","passiveSupported","elementCanBeScrolled","alwaysContainsScroll","locationCouldBeScrolled","elementCouldBeScrolled","getScrollVariables","elementCouldBeVScrolled","elementCouldBeHScrolled","getHScrollVariables","getTouchXY","getDeltaXY","extractRef","generateStyle","lockStack","getOutermostShadowParent","shadowParent","exported","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","currentAxis","touchStart","moveDirection","canBeScrolledInMainDirection","cancelingAxis","endTarget","sourceDelta","noOverscroll","directionFactor","getDirectionFactor","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","elementScroll","handleScroll","shouldPrevent","_event","sourceEvent","should","shardNodes","shouldCancel","scrollTouchStart","scrollWheel","scrollTouchMove","inst","ReactRemoveScroll","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","createSelectContext","createSelectScope","usePopperScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","__scopeSelect","popperScope","setTrigger","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","triggerPointerDownPosRef","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","option","PopperPrimitive","onTriggerChange","onValueNodeChange","onValueNodeHasChildrenChange","onNativeOptionAdd","onNativeOptionRemove","optionsSet","BubbleSelect","SelectTrigger","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","enabledItems","currentItem","nextItem","findNextItem","handleOpen","shouldShowPlaceholder","hasPointerCapture","releasePointerCapture","isTypingAhead","VALUE_NAME","SelectValue","valueProps","SelectIcon","iconProps","SelectPortal","PortalPrimitive","SelectContent","fragment","setFragment","DocumentFragment","frag","SelectContentProvider","SelectContentImpl","CONTENT_MARGIN","useSelectContentContext","onCloseAutoFocus","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","scrollIntoView","block","focusSelectedItem","pointerMoveDelta","_triggerPointerDownPo","_triggerPointerDownPo2","_triggerPointerDownPo3","_triggerPointerDownPo4","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","onViewportChange","onItemLeave","_context$trigger","onContextMenu","flexDirection","isModifierKey","candidateNodes","currentElement","currentIndex","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","isFirstItem","minHeight","handleScrollButtonChange","SelectViewportProvider","onScrollButtonChange","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","justifyContent","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","groupContext","SelectItemContextProvider","useSelectItemContext","SelectItem","textValue","textValueProp","itemProps","isSelected","setTextValue","isFocused","setIsFocused","_contentContext$itemR","textId","handleSelect","onItemTextChange","prevTextValue","_node$textContent","onPointerUp","onPointerMove","_contentContext$onIte","onPointerLeave","_contentContext$onIte2","_contentContext$searc","ITEM_TEXT_NAME","SelectItemText","itemTextProps","nativeOptionsContext","itemTextNode","setItemTextNode","_contentContext$itemT","nativeOption","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","onAutoScroll","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","canScrollDown2","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","_activeItem$ref$curre","activeItem","_contentContext$onIte3","SelectSeparator","separatorProps","SelectArrow","selectProps","selectProto","HTMLSelectElement","onSearchChange","handleSearchChange","timerRef","updateSearch","normalizedSearch","currentItemIndex","wrappedItems","wrapArray","Value","Viewport","Label","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton","ChevronUp","Check","SelectPrimitive","slopeCheck","refMap","chartInteract","setChartInteract","statesWithoutBans","statesBorderBans","bordersStateWithTotalBan","borderStates","SectionSubtitle","TitleStateSelect","FlowMap","FlowToggle","ShareChartButton","DownloadDataButton","slopeBanCount","UsMap","SlopeChart","slopeBorderBanCount","onMouseOver","Cross","ArrowBigUp","ArrowBigDown","Link","linkText","fetchLiveData","policyData","legislationData","getJSON","dataType","response","fetch","status","policy","environment_type","stateCount","totalCount","countStates","loopData","json","callouts","Restrictive","Protective","_dataChange$find","_dataChange$find2","totalAbortions2023","numStatesTotalAbortionBan","setLegislationData","setPolicyData","changeInAbortionsSince2020","dataChange","STATE","medicationAbortionsSince2023","fetchData","policyLevelGrouped","stateText","stateLegText","formatY","GavelIcon","level","_policyLevelGrouped$g","_policyLevelGrouped$g2","policyLevel","UsIcon","numStatesSimilarPolicy","PillIcon","state_text","MetricCard","urlText","updateBandScale","startOfDay","differenceInCalendarDays","dateLeft","dateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","startOfYear","cleanDate","getDayOfYear","addLeadingZeros","lightFormatters","signedYear","dayPeriodEnumValue","numberOfDigits","dayPeriodEnum","formatters","signedWeekYear","weekYear","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","delimiter","absOffset","minutes","isValid","originalDate","parts","isToken","cleanEscapedString","preprocessor","formatterOptions","part","formatter","matched","isWithinInterval","MotionConfig","initialY","GridRows","uppercasePattern","msPattern","toHyphenLower","hName","shallowEqualObjects","objA","objB","aKeys","bKeys","stringOrNumber","aural","braille","handheld","print","tty","tv","embossed","matchers","scan","deviceAspectRatio","deviceHeight","deviceWidth","colorIndex","monochrome","featureMatchers","minAspectRatio","maxAspectRatio","minDeviceAspectRatio","maxDeviceAspectRatio","minDeviceHeight","maxDeviceHeight","minDeviceWidth","maxDeviceWidth","minColor","maxColor","minColorIndex","maxColorIndex","minMonochrome","maxMonochrome","minResolution","maxResolution","toQuery","keyVal","realKey","hyphenate","hyphenateKeys","useIsUpdate","useQuery","getQuery","makeQuery","setQuery","newQuery","useMediaQuery","device","deviceSettings","deviceFromProps","deviceFromContext","getDevice","setDevice","newDevice","useDevice","useMatchMedia","getMatchMedia","setMq","isUpdate","newMq","setMatches","updateMatches","ev","useMatches","nat50","y0Accessor","nat05","y1Accessor","nat95","otherAccessor","tooltipTransition","dateRange","showRange","barsTranslateXInit","highlightDates","showEvents","showTickLabels","showValues","showAverageLine","showYAxis","showChart","nonHighlightOpacity","nonHighlightShow","showOtherEstimates","isSmallScreen","eventRadius","eventTooltipData","showEventTooltip","hideEventTooltip","setHideEventTooltip","last6MonthsAbortionsAvg","startDate","endDate","numBottomTicks","currentMon","finalData","scaleBand","startDateX","endDateX","initX","maxGutt","maxWeCount","averageValue","eachBand","scaleBandInvert","handleEventTooltip","weCountToolTip","barHeight","MotionRect","circle","textY","isHighlighted","tickText","dateObject","onTouchStart","onTouchMove","ChevronsRight","UncertaintyIntervalIcon","setShow","entireCopy","indianaCheck","formatDate","hasTotalBanMon","setShowOtherEstimates","MonthlyChart","EstimatesChartLegend","EstimatesToggle","subtitle","borderBottom","activeSection","NavItem","StateSelect","_copy$policy","policyURL","targetKey","keyPressed","setKeyPressed","handleKeyUp","ChevronLeft","ChevronRight","Mouse","StepButton","numSteps","activeStep","onActiveStepChange","leftArrowPressed","useKeyPress","rightArrowPressed","scrollYPosition","setScrollYPosition","newScrollYPosition","ChevronLeftIcon","ChevronRightIcon","WaveBackground","isSameMonth","_dateLeft","_dateRight","isSameYear","PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","createSliderContext","createSliderScope","SliderProvider","useSliderContext","Slider","minStepsBetweenThumbs","onValueCommit","inverted","sliderProps","thumbRefs","valueIndexToChangeRef","SliderOrientation","SliderHorizontal","SliderVertical","setValues","_thumbs$valueIndexToC","valuesBeforeSlideStartRef","updateValues","atIndex","decimalCount","getDecimalCount","snapToStep","rounder","roundValue","prevValues","nextValues","getNextSortedValues","minStepsBetweenValues","stepsBetweenValues","getStepsBetweenValues","hasMinStepsBetweenValues","__scopeSlider","thumbs","onSlideStart","closestIndex","closestDistance","getClosestValueIndex","onSlideMove","onSlideEnd","onHomeKeyDown","onEndKeyDown","onStepKeyDown","stepDirection","SliderOrientationProvider","useSliderOrientationContext","startEdge","endEdge","slider","setSlider","rectRef","isSlidingFromLeft","getValueFromPointer","pointerPosition","linearScale","SliderImpl","isBackKey","sliderRef","isSlidingFromBottom","setPointerCapture","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","SliderThumb","thumb","setThumb","SliderThumbImpl","totalValues","getLabel","orientationSize","thumbInBoundsOffset","halfWidth","getThumbInBoundsOffset","Track","Range","SliderPrimitive","IntroItem","MotionText","showEventInteractionBubble","stepMap","stateTimeline","step1Html","step2Html","step3Html","linkTheEstimates","linkMapHeadline","linkSlopeHeadline","formatCaveat","handleScrollClick","_refMap$current","behavior","toggleWiggle","stepProps","setDateRange","setActiveStep","finalStep","DateSlider","StepperText","OpeningText","point3_date","point2_date","point1_date","pointDate","yearPrefix","stateData","scrollPosition","setScrollPosition","ChevronsRightIcon","OpenerDesktop","Stepper","NavBar","MetricsSection","MonthlyChartSection","InterstateTravelSection","PolicySection","ClosingSection","App","observer","mutationsList","addedNodes","ELEMENT_NODE"],"sourceRoot":""}